Какие переменные доступны?
важность: 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".