В исходнике лишняя закрывающая } вызывает SyntaxError, поэтому вывода нет. Если убрать её, array0 и array1 вернут 0, и консоль покажет [0, 0].
Что будет выведено в консоль (пример 42)
В исходнике лишняя закрывающая } вызывает SyntaxError, поэтому вывода нет. Если убрать её, array[0]() и array[1]() вернут 0, и консоль покажет [0, 0].
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Нужно понять, какой вывод появится в консоли после выполнения следующего JavaScript‑кода:
var i = 10;
var array = [];
while (i--) {
array.push(function() {
return i + 1;
});
}
console.log([
array[0](), // ???
array[1](), // ???
]);
}
Определите значения, которые вернут вызовы array[0]() и array[1]().
Ответ
В исходнике лишняя закрывающая } вызывает SyntaxError, поэтому вывода нет. Если убрать её, array0 и array1 вернут 0, и консоль покажет [0, 0].
Все функции замыкают одну общую переменную var i. После десяти успешных итераций i равно 0; затем условие while(i--) ещё раз проверяет старое значение 0 и одновременно уменьшает i до -1. Цикл заканчивается, а функции вычисляют -1 + 1.
Это отличается от привычного for, где итоговый счётчик часто остаётся на границе. Если нужны значения конкретных итераций, сохраняйте текущее число в отдельной let-переменной внутри тела цикла или передавайте его фабрике функций.