Определение вывода программы в консоль

В нестрогом обычном script при отсутствии ранее объявленного a будут выведены 2 и 3. В strict mode или ES-модуле присваивание необъявленному a вызовет ReferenceError.

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

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

В нестрогом обычном script при отсутствии ранее объявленного a будут выведены 2 и 3. В strict mode или ES-модуле присваивание необъявленному a вызовет ReferenceError.

Подробный разбор

Ответ с пояснениями

Условие

Предскажите, какие значения будут напечатаны в консоли после выполнения следующего скрипта.

var outer = 3;

function c() {
    let inner = 4;
    a = 2;
}

c();

console.log(a); // ?
console.log(outer); // ?

Ответ

В нестрогом обычном script при отсутствии ранее объявленного a будут выведены 2 и 3. В strict mode или ES-модуле присваивание необъявленному a вызовет ReferenceError.

Let inner существует только внутри c, а outer объявлен снаружи и не меняется. Неявная глобальная переменная a — ошибка проектирования: её нужно явно объявить. Уточнение режима выполнения важно, поскольку без него у примера нет одного универсального результата.

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

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

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

Подробнее