Что будет выведено в консоль (пример 42)

В исходнике лишняя закрывающая } вызывает SyntaxError, поэтому вывода нет. Если убрать её, array[0]() и array[1]() вернут 0, и консоль покажет [0, 0].

Короткий ответ

Что ответить на собеседовании

В исходнике лишняя закрывающая } вызывает SyntaxError, поэтому вывода нет. Если убрать её, array0 и array1 вернут 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-переменной внутри тела цикла или передавайте его фабрике функций.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее