В нестрогом обычном 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 — ошибка проектирования: её нужно явно объявить. Уточнение режима выполнения важно, поскольку без него у примера нет одного универсального результата.