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

204
Visualizações
Pregunta de elevación de var en javascript y su salida

Me pregunto por qué la salida de la tercera consola.log es 2. Sé que las declaraciones var se elevan (sin su inicialización de valor) a la parte superior del alcance global o de función al que pertenece, incluso cuando está dentro de un bloque with o catch. Todavía estoy estudiando javascript en este momento y nadie puede explicarme correctamente, ya que esperaba que el valor de los últimos 2 console.log no esté definido. ¿Por qué el segundo archivo console.log no está definido y la última salida de console.log es 2? ¿Por qué el último puede acceder al valor de y dentro del bloque catch?

 (function () { try { throw new Error(); } catch (x) { var x = 1, y = 2; console.log(x); } console.log(x); console.log(y); })();

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

0

Ambos x,y son izados. var tiene un alcance de función, por lo que se izarán sin inicialización en la parte superior del bloque.

 (function () { var x,y; try { throw new Error(); } catch (x) { x = 1; y = 2; console.log(x); } console.log(x); console.log(y); })();

Tiene una variable local en el bloque catch debido a catch(x). Cuando haces x=1 dentro del bloque catch , solo estás cambiando el valor de tu x local (el que es el parámetro del bloque catch). La x interior sombrea la x exterior. La x exterior aún no está undefined . Actualizar y actualizará el exterior, por lo tanto, su salida.

about 4 years ago · Juan Pablo Isaza Relatório

0

La explicación tiene todo que ver con la elevación y la asignación variables.

En el bloque catch, la variable y se eleva al nivel de función de la función anónima

Dado que su bloque catch está escrito como " catch (x) ", la instrucción var está asignando su valor local de x dentro del bloque catch a 1 . Es por eso que el primer console.log(x) devuelve 1 .

La forma en que está escrito su código, la variable x no está definida en el nivel de función, lo que da como resultado que el segundo console.log(x) devuelva undefined .

la variable y se eleva al nivel de función (a pesar de que la asignación aparece en la línea var dentro del bloque catch). Por lo tanto, la asignación var en el bloque catch almacena el valor de y como 2 en el nivel de función.

Es por eso que aparece como 2 en su tercera declaración de console.log .

Consulte los siguientes ejemplos de código con la introducción de una variable z dentro de los bloques try/catch

Ejemplo 1:

 (function () { try { var z='before'; throw new Error(); var z='after'; } catch (x) { var x = 1, y = 2 console.log(x); } console.log(x); console.log(y); console.log(z); })();

donde console.log(z) responderá con ' before '

Ejemplo #2:

 (function () { try { var z='before'; throw new Error(); z='after'; } catch (x) { var x = 1, y = 2, z='catch' console.log(x); } console.log(x); console.log(y); console.log(z); })();

donde console.log(z) responderá con ' catch '

about 4 years ago · Juan Pablo Isaza Relatório

0

En JS, var tiene un alcance de función para que pueda acceder a y en cualquier lugar de la función. Para x , tiene dos variables separadas, una en catch(x) y la segunda se inicializa en el interior catch.

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