Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

363
Vistas
función de elevación: ¿por qué mi función no está definida correctamente?

 function goo(){ console.log(foo) console.log(foo()) { function foo() {return 'im foo'} } } goo()

Estoy tratando de ver dónde se eleva la definición de la función foo cuando está dentro de un bloque.

Aprendí que en el modo no estricto, la definición de una función se eleva a la parte superior del alcance de la función. Así que esperaba que la función foo se definiera justo después de ejecutar goo() porque espero que se eleve a la parte superior de la función goo.

Después de la definición elevada de foo, se ejecutarían console.log(foo) y console.log(foo()) y esperaba que cada uno me diera una definición de función y 'im foo'.

Pero lo que terminó sucediendo es que la consola dice que foo se inicializó como indefinido y que foo no es una función. Pensé que la inicialización a indefinido solo ocurría cuando se elevaba una variable var. Cuando se iza la definición de funciones, ¿no se definen a sí mismas? No estoy seguro de por qué foo está definido como indefinido. La consola no generó un error de referencia que dice que foo no está declarado. foo se declara bien, pero la consola dice que no es una función. ¿Por qué se inicializa como indefinido cuando lo escribí para que sea una función que devuelve 'im foo' en la definición?

 function goo(){ console.log(foo) console.log(foo()) function foo() {return 'im foo'} } goo()

Esperaba que se ejecutara como este código anterior. La única diferencia entre los dos es que la función foo se define dentro de un bloque. Pero, ¿por qué habría una diferencia entre los dos si la función foo se eleva a la parte superior de la función goo? ¿Significa esto que me equivoqué acerca de que la definición de la función se elevó a la parte superior del alcance de la función?

about 4 years ago · Juan Pablo Isaza
3 Respuestas
Responde la pregunta

0

Tanto las funciones foo() como goo() se elevan durante la fase de interpretación, pero el único inconveniente es que foo se mantiene dentro de un ámbito de bloque y, por lo tanto, no es posible acceder y recibe un error. Recuerde que el ámbito de nivel de bloque siempre afecta la resolución del identificador (nada que ver con Hoisting ). En este ejemplo, las declaraciones de funciones se definen y elevan, pero una función declarada dentro de un bloque puede o no estar disponible fuera del bloque.

about 4 years ago · Juan Pablo Isaza Denunciar

0

Por definición, el izado solo ocurre para el bloque.

https://developer.mozilla.org/en-US/docs/Glossary/Hoisting#:~:text=JavaScript%20Hoisting%20refers%20to%20the%20process%20by%20the%20interpreter%20appears%20to%20move%20the %20declaración%20de%20funciones%2C%20variables%20o%20clases%20a%20el%20superior%20de%20su%20ámbito%2C%20anterior%20a%20ejecución%20de%20el%20código .

Específicamente para funciones:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/function#conditionally_created_functions

about 4 years ago · Juan Pablo Isaza Denunciar

0

function goo(){ console.log(foo) console.log(foo()) { alert(1) function foo() {return 'im foo'} } } goo()

es igual a :

 function goo(){ console.log(foo) console.log(foo()) { function foo() {return 'im foo'} alert(1) } } goo()

pero no igual a:

 function goo(){ { function foo() {return 'im foo'} alert(1) } console.log(foo) console.log(foo()) } goo()
about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda