Что такое замыкание · Frontend Developer — JobPilot

Что такое замыкание

Frontend Developer · 37%
Вопрос 1877 / #
Пример ответа

Коротко: Замыкание — это функция, которая запоминает и имеет доступ к переменным из своей внешней (лексической) области видимости, даже после того, как внешняя функция завершила выполнение. В моём опыте я часто использовал замыкания для создания приватных переменных, обработчиков событий и функций-фабрик в JavaScript.

Ключевые идеи:
  • Замыкание позволяет функции сохранять доступ к переменным родительской области видимости после её завершения
  • Это основа для инкапсуляции и создания приватных данных в JavaScript
  • Замыкания часто используются в колбэках, обработчиках событий и модульном паттерне
Пример: Например, при создании счётчика: функция createCounter возвращает функцию, которая увеличивает внутреннюю переменную count. Эта переменная недоступна извне, но сохраняется между вызовами благодаря замыканию.
Пример замыкания для создания приватного счётчика
javascript
function createCounter() {
    let count = 0; // Приватная переменная, доступная только через замыкание
    
    return function() {
        count += 1;
        return count;
    };
}

const counter = createCounter();
console.log(counter()); // 1
console.log(counter()); // 2
console.log(counter()); // 3
// Переменная count недоступна напрямую извне, но сохраняет своё значение
Вопросы для интервьюера:
  • Как замыкания помогают избежать проблем с асинхронным кодом?Замыкания позволяют сохранить контекст переменных на момент создания функции, что полезно в циклах с setTimeout или обработчиками событий, чтобы избежать общей ошибки с использованием последнего значения переменной цикла.
  • Какие есть риски при использовании замыканий?Основной риск — утечки памяти, так как замыкания удерживают ссылки на внешние переменные, предотвращая их сборку мусорщиком. Важно освобождать ссылки, когда они больше не нужны.
Практический совет (на неделю):
  1. Используйте замыкания для создания модулей с приватными данными, например, в паттерне "модуль" (IIFE).
  2. Будьте осторожны с замыканиями в циклах — используйте let вместо var или создавайте отдельную функцию для каждой итерации.
Frontend Developer
Общий
37%
Навигация
Расскажи про свой опыт
Следующий: Есть ли вопросы
Предыдущий: Расскажи про свой опыт

Мы используем cookie для улучшения сайта. Продолжая пользоваться сайтом, вы соглашаетесь с политикой cookie и политикой конфиденциальности.