zpět k lekci

Které proměnné jsou dostupné?

důležitost: 5

Následující funkce vytvořPracovníka vytvoří jinou funkci a vrátí ji. Nová funkce může být volána odjinud.

Bude mít přístup k vnějším proměnným z místa svého vzniku, nebo z místa volání, nebo z obojího?

function vytvořPracovníka() {
  let jméno = "Petr";

  return function() {
    alert(jméno);
  };
}

let jméno = "Jan";

// vytvoření funkce
let pracuj = vytvořPracovníka();

// její volání
pracuj(); // co zobrazí?

Kterou hodnotu zobrazí? „Petr“ nebo „Jan“?

Odpověď zní: Petr.

Funkce pracuj() uvedená v následujícím kódu načte jméno z místa svého vzniku odkazem na vnější lexikální prostředí:

Výsledkem zde je tedy "Petr".

Kdyby však ve funkci vytvořPracovníka() nebylo let jméno, pak by hledání pokračovalo dál ven a převzalo globální proměnnou, jak vidíme v uvedeném řetězci. V tom případě by výsledek byl "Jan".