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

124
Vistas
Función de flecha usando la palabra clave var y la función regular con la misma confusión de nombres en javascript

¿Por qué esto registra 1? Es confuso para mí, ¿alguien puede explicar por favor?

 (function(){ var hello = () => { console.log(1); } function hello () { console.log(2); } return hello() })()

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

0

Declaraciones de funciones (las declaraciones que comienzan con function functionName( ) se elevan a la parte superior de su ámbito adjunto y se asignan primero a su identificador de nombre de función, antes de que cualquier otra cosa se ejecute en ese ámbito. Las asignaciones con = no.

El hecho de que sea una función de flecha no importa particularmente: una asignación de function en el mismo punto produciría los mismos resultados.

 (function(){ var hello = function() { console.log(1); } function hello () { console.log(2); } return hello() })()

Su código es equivalente a

 (function(){ // hello identifier gets created at the very beginning var hello; // hoisted function declaration assigns to `hello`: hello = function hello () { console.log(2); } // assignment with =, not hoisted, assigns to `hello` hello = () => { console.log(1); } return hello() })()

Recomendaría usar la sintaxis ES2015+ al menos, lo que ayudará a evitar que cometa este tipo de accidentes: prohibirá las redeclaraciones de variables si usa let o const .

 (function(){ let hello = () => { console.log(1); } function hello () { console.log(2); } return hello() })()

about 4 years ago · Juan Pablo Isaza Denunciar

0

Porque:

  • Las declaraciones de funciones crean identificadores (más específicamente, "enlaces") en el mismo entorno de enlace que las declaraciones var .
  • Una declaración var para un enlace que ya existe no es un error
  • Las declaraciones de función se procesan al ingresar a la función o al alcance global ("alzado"), por lo que se asignan primero al enlace

Entonces, su código está creando un enlace, asignándole la función declarada y luego sobrescribiendo ese valor con la función de flecha. En efecto:

 (function(){ // Declaration of the var-scoped binding happens first var hello; // Then the function declaration is processed, assigning // the function to the binding hello = function hello() { console.log(2); }; // Then the step-by-step code begins and processes // the assignment hello = () => { console.log(1); }; return hello(); })();


Nota al margen: var está efectivamente en desuso, no hay razón para usarlo en el código moderno. En su lugar, use let o const . Tienen un comportamiento más racional:

  • Son de alcance de bloque, no de función o alcance global (a menos que aparezcan en el nivel superior de función o alcance global)
  • Las declaraciones repetidas son un error (incluida una declaración let o const que entraría en conflicto con una declaración de estilo var como una declaración de función)
  • En el ámbito global, viven en un ámbito interno anidado dentro del ámbito var global y no crean propiedades en el objeto global.

Su ejemplo le habría dado un error agradable y útil con let o const :

 (function(){ let hello = () => { console.log(1); }; function hello () { console.log(2); } return hello(); })()

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