Что выведет код 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 ошибок.