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