Page 156 - Браун Э. - Изучаем JavaScript. Руководство по созданию современных веб-сайтов - 2017
P. 156
f ) ; 1 1 TypeError : f - не функция
(
let f = function ( ) {
console . l o ( ' f ' ) ;
g
Временная мертвая зона
Временная мертвая зона (Temporal Dead Zone - TDZ) - это образное название
для интуитивно понятной концепции, согласно которой переменные, объявляемые
с ключевым словом let, не существуют в коде до момента их объявления. Для пере
менной к временной мертвой зоне в пределах области видимости относится тот код,
который предшествует ее объявлению.
По большей части это не должно вызывать недопонимания или проблем, но есть
один аспект TDZ, который собьет с толку людей, знакомых с JavaScript до ЕSб.
Оператор t y peof общепринят для определения, была ли переменная объявлена,
и считается "безопасным" способом проверки ее существования. Таким образом,
до появления ключевого слова let в пределах TDZ, это всегда безопасно срабатыва
ло для любого идентификатора х и не заканчивалось ошибкой.
if t ypeof х "'== "undefined" ) {
(
console . l og ( " x не существует или равен undefined" ) ;
else {
1 1 безопа сное обращение к х . . . .
При объявлении переменных с ключевым словом l e t этот код больше нельзя
считать безопасным. Например, следующий код закончится ошибкой.
(
if t y peof х "'== "unde fined" ) {
console . l og ( " x не существует или равен undefined " ) ;
else {
/ ! безопасное обращение к х . . . .
let х = 5 ;
Проверка определенности переменных с использованием typeof в ЕSб будет ме
нее необходима, поэтому на практике поведение оператора typeof во временной
мертвой зоне не должно вызывать проблем.
Строгий режим
Синтаксис ESS допускал неявные глобальные переменные (implicit global), которые
были источником многих ошибок в программе. Короче говоря, если вы забывали
объявить переменную с ключевым словом var, то JavaScript беззаботно подразуме
вал, что вы обращаетесь к глобальной переменной. Если до этого никакой такой
Временная мертвая зона 1 5 7

