Page 151 - Браун Э. - Изучаем JavaScript. Руководство по созданию современных веб-сайтов - 2017
P. 151
а использованы - в другом, поэтому вам, возможно, придется приложить некото
рые усилия, чтобы разобраться в их областях видимости.
В "традиционной" программе все ваши функции могли бы быть определены
в глобальной области видимости, и если вы не будете обращаться к глобальной об
ласти видимости из своих функций (как я рекомендую), вы даже не должны будете
заботиться о том, к какой области видимости у ваших функций есть доступ.
В современных программах на JavaScript, однако, функции зачастую определяют
ся везде, где они необходимы. Их присваивают переменным или свойствам объектов,
добавляют в массивы, передают в другие функции, возвращают из функций, а иногда
не присваивают им имен вообще.
Довольно часто функцию преднамеренно определяют в некоторой области види
мости, чтобы гарантированно получить доступ к переменным из этой области. В ре
зультате получается замкнутое выражение (closure) (вы можете считать его областью
видимости, замкнутой вокруг функции). Давайте рассмотрим пример замкнутого
выражения.
let global F u c ; / / неопределенная г л обальная функция
n
let ЬlockVar = ' а ' ; 1 1 переменная области видимости блока
globalFunc = function ( )
console . l og ( Ь lockVar ) ;
globalFunc ( ) ; / / выводит "а "
b
В функции glo a l F unc присваивается значение переменной в пределах блока:
этот блок (и его родительская, глобальная область видимости) формирует замкнутое
выражение. Независимо от того, где вы вызываете функцию globalFunc, у нее будет
доступ к идентификаторам в этом замкнутом выражении.
Давайте рассмотрим происходящее: при вызове у функции globalFunc есть до
ступ к переменной ЫockVar, несмотря на то что мы вь1шли из этой области ви
димости. Обычно после выхода из области видимости объявленные в этой области
видимости переменные могут безопасно прекратить существование. Здесь движок
JavaScript замечает, что функция определена в этой области видимости (обратиться
к функции можно и за пределами области видимости), поэтому переменная должна
быть всегда доступна.
Таким образом, определение функции в пределах замкнутого выражения может
повлиять на продолжительность существования замкнутого выражения; это также
позволяет нам получить доступ к сущностям, к которым у нас обычно не было до
ступа. Рассмотрим пример.
let f ; / / неопределенная функция
t
let о = { no e : ' Б езопасно ' } ;
1 5 2 Глава 7. Область видимости

