regresar a la lección

¿Qué variables están disponibles?

importancia: 5

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.