Какие переменные доступны?
важность: 5
Приведенная ниже функция makeWorker
создает другую функцию и возвращает ее. Эта новая функция может быть вызвана из другого места.
Будет ли она иметь доступ к внешним переменным из места своего создания, или из места вызова, или из обоих мест?
function makeWorker() {
let name = "Pete";
return function() {
alert(name);
};
}
let name = "John";
// создаём функцию
let work = makeWorker();
// вызываем её
work(); // что будет показано?
Какое значение будет показано? «Pete» или «John»?
Ответ: Pete.
Функция work()
в приведенном ниже коде получает name
из места его происхождения через ссылку на внешнее лексическое окружение:
Таким образом, в результате мы получаем "Pete"
.
Но если бы в makeWorker()
не было let name
, то поиск шел бы снаружи и брал глобальную переменную, что мы видим из приведенной выше цепочки. В этом случае результатом было бы "John"
.