Які змінні доступні?
важливість: 5
Функція makeWorker
створює іншу функцію і повертає її. Цю нову функцію можна викликати ще звідкись.
Чи матиме вона доступ до зовнішніх змінних з місця створення, з місця виклику, чи з обох?
function makeWorker() {
let name = "Петро";
return function() {
alert(name);
};
}
let name = "Іван";
// створити функцію
let work = makeWorker();
// викликати її
work(); // Що вона покаже?
Яке значення вона покаже? “Петро” чи “Іван”?
Відповідь: Петро.
Функція work()
в коді нижче отримує name
від місця його походження через посилання на зовнішнє лексичне середовище:
Отже, відповіддю буде "Петро"
.
Але якби не було let name
у makeWorker()
, тоді пошук вийшов би за межі лексичного середовища та взяв би глобальну змінну, як ми бачимо з ланцюжка вище. В такому випадку відповідь була б "Іван"
.