Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

191
Views
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 answers
Answer question

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 Report

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!