Вы пока еще не знаете JS} Область видимости и замыкания
Вы пока еще не знаете JS. И Кайл Симпсон признается, что тоже его не знает (по крайней мере полностью)… И никто не знает. Но все мы можем начать работать над тем, чтобы узнать его лучше. Сколько бы времени вы ни провели за изучением языка, всегда можно найти что-то еще, что стоит изучить и понять на другом уровне.
Вы уже прочитали «Познакомьтесь, JavaScript»? Тогда откройте вторую книгу серии «Вы пока еще не знаете JS», чтобы познакомиться поближе с первым из трех столпов JavaScript — системой областей видимости и функциональными замыканиями, а также с мощным паттерном проектирования «Модуль».
Пора освоить правила лексических областей видимости для размещения переменных и функций в правильных позициях. И заглянуть на более низкий уровень, ведь магия с хранением состояния модулей базируется на замыканиях, использующих систему лексических областей видимости.
Вы уже прочитали «Познакомьтесь, JavaScript»? Тогда откройте вторую книгу серии «Вы пока еще не знаете JS», чтобы познакомиться поближе с первым из трех столпов JavaScript — системой областей видимости и функциональными замыканиями, а также с мощным паттерном проектирования «Модуль».
Пора освоить правила лексических областей видимости для размещения переменных и функций в правильных позициях. И заглянуть на более низкий уровень, ведь магия с хранением состояния модулей базируется на замыканиях, использующих систему лексических областей видимости.
Дәйексөздер154
Но вместо этого первая команда console.log(..) выдает ошибку TDZ, потому что переменная studentName из внутренней области видимости была поднята (автоматически зарегистрирована в начале области видимости)
var studentName = "Kyle";
{
console.log(studentName);
// ???
// ..
let studentName = "Suzy";
console.log(studentName);
// Suzy
}
Что произойдет с первой командой console.log(..)? Если let studentName не поднимается в начало области видимости, первый вызов console.log(..)должен вывести "Kyle", верно? Казалось бы, в этот момент есть только внешняя переменная studentName, поэтому именно к этой переменной должна обратиться и вывести команда console.log(..).
{
console.log(studentName);
// ???
// ..
let studentName = "Suzy";
console.log(studentName);
// Suzy
}
Что произойдет с первой командой console.log(..)? Если let studentName не поднимается в начало области видимости, первый вызов console.log(..)должен вывести "Kyle", верно? Казалось бы, в этот момент есть только внешняя переменная studentName, поэтому именно к этой переменной должна обратиться и вывести команда console.log(..).
Сөреде11
1 829 кітап
813
277 кітап
767
76 кітап
8
33 кітап
7
