¿Qué variables están disponibles?
La función makeWorker
a continuación crea otra función y la devuelve. Esa nueva función se puede llamar desde otro lugar.
¿Tendrá acceso a las variables externas desde su lugar de creación, o desde el lugar de invocación, o ambos?
function makeWorker() {
let name = "Pete";
return function() {
alert(name);
};
}
let name = "John";
// crea una función
let work = makeWorker();
// la llama
work(); // ¿qué mostrará?
¿Qué valor mostrará? “Pete” o “John”?
La respuesta es: Pete.
La función work()
en el código a continuación obtiene name
del lugar de su origen a través de la referencia del entorno léxico externo:
Entonces, el resultado es “Pete”.
Pero si no hubiera let name
enmakeWorker ()
, entonces la búsqueda saldría y tomaría la variable global como podemos ver en la cadena de arriba. En ese caso, el resultado sería John
.