Page 147 - Браун Э. - Изучаем JavaScript. Руководство по созданию современных веб-сайтов - 2017
P. 147
Догадливый читатель мог бы подумать: "Хорошо, я создам в глобальной области
видимости одну функцию и сведу мои глобальные переменные к одной функции!"
Прекрасно, но только теперь вы просто перенесли проблему на один уровень вниз.
Все, что будет объявлено в пределах этой функции, будет доступно для всего, что
вызывается в этой функции ... что едва ли лучше глобальной области видимости!
Подведем черту: у вас, вероятно, будет нечто в глобальной области видимо
сти, и это не обязательно плохо, а вот пытаться избегать следует того, что зависит
от глобальной области видимости. Давайте рассмотрим простой пример: отслежива
ние информации о пользователе. Ваша программа отслеживает имя и возраст поль
зователя, а также имеет несколько функций, которые работают с этой информацией.
Это можно сделать, используя глобальные переменные.
let name = " I ren " ; / / глобальная
a
let age = 2 5 ; / / глобальная
function greet )
(
console . l o ( ' Hello, $ ( name } ! ' ) ;
g
func i on getBirthYear ( )
t
return new Date ( ) . g etFullYear ( ) - age ;
Проблема этого подхода в том, что наши функции жестко зависят от контекста
(или области видимости), из которого они вызываются. Любая функция (в любой час
ти вашей программы) может изменить значение name (случайно или преднамеренно).
" "
"
Идентификаторы name и age" (имя и возраст) весьма распространены и вполне мо
гут использоваться в другом месте по другим причинам. Поскольку функции greet
и getBirthYear зависят от глобальных переменных, они, возможно, безосновательно
полагают, что остальная часть программы использует name и age правильно.
Лучше поместить всю информацию о пользователе в один объект.
let user = (
name = " I rena " ,
age = 2 5 ,
} ;
function greet ( ) (
g
console . l o ( ' Hello, $ ( u ser . name } ! ' ) ;
func i on getBirthYear ( )
t
return new Date ( ) . g etFullYear ( ) - user . a ge ;
В этом простом примере мы сократили количество идентификаторов в глобаль
ной области видимости только на один (мы избавились от name и age, но добавили
user), но что если у нас будет 10 пользователей ... или 100?
148 Глава 7. Область видимости

