Область видимости в JS
оригинал тут https://itchief.ru/javascript/scope-and-context
В JS есть глоальная и локальные области видимости
Переменные объявленные внутри блока, не могут быть доступны в глобальной области...
Но если мы объявим переменную в глобальной области видимости, то она будет доступна внутри блока, и может быть изменена от туда.
Это происходит потому что если JS не находит переменную в своей области видимости, то он ищет её в родительской, если её нету и там, то ещё выше, и так пока не доберётся до глабальной области видимости.
Значение переменной на момент вызова
Важно что в отличии от PHP, JS берёт значение переменной согласно состоянию лексического окружения на момент вызова функции а не на момент её создания...
Родительская область а не стэк вызова
Так же важно что JS ищет переменные не возвращаясь по стеку вызова, а поднимаясь в родительскую область вызова.
Устаревшее ключевое слово var
var
В отличии от let, var ограничевается только функцией, но может быть доступной за пределами блока.
Вложенные области видимости и var
var
Здесь var working
транслируется в родительскую "зелёную" область видимости, а из неё доступен так же для функции yearsToRetire()
Last updated