Page 154 - Браун Э. - Изучаем JavaScript. Руководство по созданию современных веб-сайтов - 2017
P. 154
Так что же здесь происходит? На первый взгляд, не имеет никакого смысла обра
щаться к переменной до ее объявления. Однако к переменным, объявленным с клю
чевым словом var, применяется механизм подъема (hoisting). JavaScript просматри
вает всю область видимости (функции или глобальную) и поднимает к ее вершине
все переменные, объявленные с ключевым словом var. Важно понимать, что подни
маются только объявления, а не присвоения. Таким образом, JavaScript интерпрети
ровал бы предыдущий пример так.
var х ; / / поднято объявление (но н е присвоение)
х ; / / undefined
х = 3 ;
х ; 11 3
Давайте рассмотрим более сложный пример наряду со способом, которым
JavaScript его интерпретирует.
/ / что вы пишете / / как JavaScript интерпретирует это
var х ;
var у ;
i f ( x ! == 3 ) { i f (x ! = = 3 ) {
console . l og ( y ) ; console . l og ( y ) ;
var у = 5 ; у = 5 ;
i f ( y === 5 ) { i f ( y === 5 )
var х = 3 ; х = 3 ;
console . l og ( y ) ; console . log ( у ) ;
i f ( х === 3 ) { i f ( х === 3 ) {
console . l og ( y ) ; console . l og ( y ) ;
Я не утверждаю, что это хорошо написанный код на JavaScript. Не нужно исполь
зовать переменные прежде, чем вы их объявите. Это ведет к ошибкам и не имеет
никакого практического смысла. Но в данном примере действительно поясняется,
как работает механизм подъема.
Еще один аспект переменных, объявленных с ключевым словом var, - движок
JavaScript не обращает внимание на их повторное объявление.
/ / что вы пишете / / как JavaScript интерпретирует это
var х ;
var х = 3 ; х = 3 ;
i f ( х === 3 ) i f ( х === 3 ) {
var х = 2 ; х = 2 ;
console . l og ( x ) ; console . l og ( x ) ;
console . l og ( x ) ; console . l og ( x ) ;
Этот пример должен прояснить, что (в пределах той же функции или глобальной
области видимости) ключевое слово var не может использоваться для создания новых
Область видимости функции и механизм подъема объявлений 155

