Выбор ответа Middle Области видимости и замыкания обновлено
Замыкание и память
Вопрос
Какое утверждение о замыканиях и памяти верное?
function setup(button) {
const bigData = new Array(1e6).fill('*');
button.addEventListener('click', () => {
console.log(bigData.length);
});
}
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: bigData живёт, пока обработчик подписан на достижимую кнопку. Обработчик использует bigData, значит его окружение живо, пока жив обработчик.
Варианты ответа
bigDataосвободится сразу после выхода изsetup, как локальная переменнаяbigDataосвободится после первого клика, когда обработчик отработаетbigDataживёт, пока обработчик подписан на достижимую кнопкуправильный ответ- Замыкания копируют данные, поэтому массив будет занимать память дважды
Разбор
Обработчик использует bigData, значит его окружение живо, пока жив обработчик. Обработчик живёт, пока подписан на достижимую кнопку. Освободить память можно через removeEventListener или удалив кнопку и все ссылки на неё. Клик ничего не меняет: обработчик продолжает висеть. Копирования нет, замыкание держит ссылку на то же окружение.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.