Что выведет код Middle Области видимости и замыкания обновлено

Три способа объявить функцию

Вопрос

Что выведет код? По строке на каждый вывод.

try { fn1(); console.log('fn1 ок'); } catch (e) { console.log('fn1 ' + e.constructor.name); }
function fn1() {}

try { fn2(); console.log('fn2 ок'); } catch (e) { console.log('fn2 ' + e.constructor.name); }
var fn2 = function () {};

try { fn3(); console.log('fn3 ок'); } catch (e) { console.log('fn3 ' + e.constructor.name); }
const fn3 = () => {};

Попробуйте сами

Напишите, что выведет код: каждый вывод с новой строки.

Показать ответ и разбор

Коротко

Код выведет: fn1 ок, fn2 TypeError, fn3 ReferenceError. Почему так Объявление функции поднимается целиком - вызов до объявления работает. var поднимается со значением undefined, и вызов даёт TypeError «не функция». const попадает во временную мёртвую зону, и обращение даёт ReferenceError.

Что выведет

fn1 ок
fn2 TypeError
fn3 ReferenceError

Разбор

Почему так

Объявление функции поднимается целиком - вызов до объявления работает. var поднимается со значением undefined, и вызов даёт TypeError «не функция». const попадает во временную мёртвую зону, и обращение даёт ReferenceError. Разные типы ошибок - то, что проверяют: сказать просто «будет ошибка» недостаточно.

Вывод

fn1 ок
fn2 TypeError
fn3 ReferenceError

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.