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".