назад до уроку

Які змінні доступні?

важливість: 5

Функція makeWorker створює іншу функцію і повертає її. Цю нову функцію можна викликати ще звідкись.

Чи матиме вона доступ до зовнішніх змінних з місця створення, з місця виклику, чи з обох?

function makeWorker() {
  let name = "Петро";

  return function() {
    alert(name);
  };
}

let name = "Іван";

// створити функцію
let work = makeWorker();

// викликати її
work(); // Що вона покаже?

Яке значення вона покаже? “Петро” чи “Іван”?

Відповідь: Петро.

Функція work() в коді нижче отримує name від місця його походження через посилання на зовнішнє лексичне середовище:

Отже, відповіддю буде "Петро".

Але якби не було let name у makeWorker(), тоді пошук вийшов би за межі лексичного середовища та взяв би глобальну змінну, як ми бачимо з ланцюжка вище. В такому випадку відповідь була б "Іван".