Что выведет код Senior Области видимости и замыкания обновлено
Замыкание в while с постдекрементом
Вопрос
Что выведет код? По строке на каждый вывод.
var array = [];
var i = 10;
while (i--) {
array.push(function () {
return i + i;
});
}
console.log(array.length);
console.log(array[0]());
console.log(array[1]());
Попробуйте сами
Напишите, что выведет код: каждый вывод с новой строки.
Показать ответ и разбор
Коротко
Код выведет: 10, -2, -2. Почему так Задача с первого собеседования: ожидалось [20, 18], а получается другое. while (i--) останавливается, когда i становится нулём, но постдекремент уменьшает его ещё раз - к моменту вызова все функции видят −1.
Что выведет
10
-2
-2
Разбор
Почему так
Задача с первого собеседования: ожидалось [20, 18], а получается другое. while (i--) останавливается, когда i становится нулём, но постдекремент уменьшает его ещё раз - к моменту вызова все функции видят −1. Плюс все они замкнуты на одну переменную из-за var. Починка: либо захватить значение параметром немедленно вызываемой функции, либо объявить копию через let внутри тела цикла.
Вывод
10
-2
-2
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.