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

130
Visualizações
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 Respostas
Responde à pergunta

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 Relatório

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 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