Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

161
Visualizações
En Javascript, ¿puede un cierre compartir el alcance con un valor de retorno de función?

Estoy tratando de entender este código inexplicable de Eloquent Javascript :

 function trackKeys(keys) { let down = Object.create(null); function track(event) { if (keys.includes(event.key)) { down[event.key] = event.type == "keydown"; event.preventDefault(); } } window.addEventListener("keydown", track); window.addEventListener("keyup", track); return down; } var arrowKeys = trackKeys(["ArrowLeft", "ArrowRight", "ArrowUp"]);

Creo que entiendo cómo la track función interna mantendrá una referencia hacia down y las keys porque es un cierre, pero estoy perdido al return down;

¿Ese valor de retorno será una referencia a exactamente lo mismo down están accediendo las devoluciones de llamada? No entiendo; Pensé que solo se podía acceder a las variables locales mediante funciones internas.

Seguimiento: ¿qué pasaría si down fuera un tipo de datos primitivo y no un objeto, seguiría funcionando?

about 4 years ago · Juan Pablo Isaza
2 Respostas
Responde à pergunta

0

La función inicializa la variable down como un objeto.

Entonces, dentro de la función, down es una variable que apunta a un objeto determinado.

Cuando la función regresa down , devuelve una referencia al objeto, lo que significa que el objeto se vuelve accesible a través del retorno de la función.

Si down fuera primitivo, esto no funcionaría ya que la función solo devolvería un valor primitivo en lugar de una referencia a un objeto.

about 4 years ago · Juan Pablo Isaza Relatório

0

TLDR: Decir "se devuelve una variable" es ambiguo debido a la imprecisión inherente del lenguaje humano. No significa que se devuelva el emparejamiento de variables de identificador y valor. Significa que se devuelve el valor de la variable. En este caso se devuelve el valor de la referencia al objeto (creado por Object.create(null) ).

¿Ese valor de retorno será una referencia a exactamente lo mismo down están accediendo las devoluciones de llamada?

Sí.

Pensé que solo se podía acceder a las variables locales mediante funciones internas.

Una variable es un emparejamiento de un identificador (es decir, el nombre de la variable) y un valor.

El alcance es la región de código sobre la cual un identificador (en este caso " down ") tiene un significado específico.

El alcance de un identificador está determinado por la forma en que se declara la variable ( const / let / var /implicit en modo no estricto). La variable down se declara usando let ; por lo tanto, su alcance es el bloque contenedor más cercano, que es la función trackKeys .

Las funciones declaradas dentro trackKeys se cerrarán down través del mecanismo integrado de formación de cierre de JavaScript y, por lo tanto, compartirán el significado del identificador "abajo".

Nota: si las funciones internas o los bloques también declaran su propia variable llamada "down" estas variables internas darán como resultado un error ( var en un bloque que no es de función en modo estricto, declaración duplicada), no haga nada ( var en modo no estricto en un bloque que no es de función), o sombrear (ocultar de la vista) la variable externa ( let / const ).

Regresar down no cambia el alcance del identificador down . Tratar de hacer referencia a "abajo" fuera trackKeys continuará dando error o devolverá undefined dependiendo de si está en modo estricto. Sin embargo, devolver el valor de down hace que este valor esté disponible fuera trackKeys .

about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda