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

211
Vistas
elevación de funciones para llamadas a funciones internas

Tenga en cuenta: ^ Esta pregunta no es un duplicado de una pregunta let/const ya que no está relacionada. La misma pregunta permanece sin importar si fue var , let o const ya que eso no está relacionado con la intención de la pregunta.


Realmente agradecería alguna aclaración sobre la elevación de funciones dentro de otra función. Esto es lo que entiendo claramente hasta ahora:

Esto no funciona porque se llama a anotherFunc en el archivo antes de que se cree y const no se eleva antes de que se cree.

 const someFunc = () => { console.log('someFunc called'); } anotherFunc(); // anotherFunc is not defined error const anotherFunc = () => { console.log('anotherFunc called'); }

Esto funciona porque anotherFunc es una declaración de función y se elevan a la parte superior según las reglas de JS:

 anotherFunc(); // anotherFunc called function anotherFunc() { console.log('anotherFunc called'); }

No funciona porque es una expresión de función y dado que están asignados a una variable var , la variable se elevará a la parte superior y no estará definida inicialmente:

 anotherFunc(); // anotherFunc is not a function at <anonymous> var anotherFunc = function () { console.log('anotherFunc called'); }

Entonces, ¿alguien puede explicarme por qué esto funciona (ver más abajo)? Este es un paso más profundo de todo lo explicado en línea.

Si una función se declara más tarde pero se llama dentro de otra función antes, ¿por qué funciona? ¿Esto tiene algo que ver con el orden de ejecución de JS?

 const someFunc = () => { console.log('someFunc called'); anotherFunc(); } const anotherFunc = () => { console.log('anotherFunc called'); } someFunc(); // 'someFunc called' 'anotherFunc called'

¿Es porque JS asigna primero someFunc y anotherFunc en la memoria, por lo que llamarlos más tarde no importa en qué orden estén?

Por último, ¿esto difiere para las funciones const/let/var en el mismo escenario (el último)?

¡Muchas gracias por la aclaración!

about 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

El contexto de ejecución de JavaScript tiene dos componentes:

  • Memoria (entorno variable)
  • Código (hilo de ejecución): sincronización y subproceso único, lo que significa que JS solo puede hacer las cosas una por una y en un orden determinado (una tras otra)

Entonces, la razón por la que esto funciona:

 const someFunc = () => { console.log('someFunc called'); anotherFunc(); } const anotherFunc = () => { console.log('anotherFunc called'); } someFunc(); // 'someFunc called' 'anotherFunc called'

... es porque JS primero asigna someFunc y anotherFunc a undefined dentro de la memoria (como sospechaba en mi pregunta). Las declaraciones de función también se guardan aquí como la función completa.

Esta es la fase de asignación de memoria. Luego ejecuta la fase de ejecución del código.

JS va línea por línea y agrega los valores a las variables.

Si el valor de la clave guardada en la memoria es una función, crea otro contexto de ejecución interno y, una vez más, ejecuta una asignación de memoria y una fase de ejecución de código para esa función en particular.

Entonces en mi caso:

  1. Se crea el contexto de ejecución.
  2. someFunc y anotherFunc se asignan a la memoria como undefined .
  3. Se llama a someFunc y se crea un nuevo contexto de ejecución interno.
  4. se ejecuta console.log .
  5. anotherFunc se guarda en undefined en la memoria dentro del contexto de ejecución de someFunc . Se ejecuta la ejecución del código y se anotherFunc a otra función y se crea otro contexto de ejecución para esa función. Como no tiene variables, etc., simplemente ejecuta console.log .
  6. anotherFunc está completo y su contexto de ejecución se elimina. Le devuelve su poder a someFunc (esto también sucede cuando regresa una función).
  7. someFunc está completo y su contexto de ejecución se elimina. Devuelve su poder al Contexto de ejecución JS principal (esto también sucede cuando regresa una función).

Este chico lo explica todo muy claro: https://youtu.be/iLWTnMzWtj4

about 4 years ago · Santiago Trujillo 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