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

298
Views
¿Por qué algunas variables declaradas usando let dentro de una función están disponibles en otra función, mientras que otras dan como resultado un error de referencia?

No puedo entender por qué las variables actúan de manera tan extraña cuando se declaran dentro de una función.

  1. En la first función declaro con let las variables b y c con el valor 10 :

     b = c = 10;

    En la second función muestro:

     b + ", " + c

    Y esto muestra:

     10, 10
  2. También en la first función declaro a con valor 10 :

     let a = b = c = 10;

    Pero en la second función muestra un error:

    No se puede encontrar la variable: a

  3. Ahora en la first función declaro d con valor 20 :

     var d = 20;

    Pero en la second función muestra el mismo error que antes, pero con la variable d :

    No puedo encontrar la variable : d

Ejemplo:

 function first() { let a = b = c = 10; var d = 20; second(); } function second() { console.log(b + ", " + c); //shows "10, 10" try{ console.log(a); } // Rreference error catch(e){ console.error(e.message) } try{ console.log(d); } // Reference error catch(e){ console.error(e.message) } } first()

over 4 years ago · Santiago Trujillo
3 answers
Answer question

0

Es porque en realidad estás diciendo:

 c = 10; b = c; let a = b;

Y no lo que crees que estás diciendo, que es:

 let a = 10; let b = 10; let c = 10;

Notará que no importa cuántas variables agregue a su cadena, solo será la primera (a) la que cause el error.

Esto se debe a que "let" limita su variable al bloque (o, "localmente", más o menos significa "entre paréntesis") en el que la declara.

Si declara una variable sin "let", abarca la variable globalmente.

Entonces, en la función donde establece sus variables, todo obtiene el valor 10 (puede ver esto en el depurador si coloca un punto de interrupción). Si coloca un registro de consola para a, b, c en esa primera función, todo está bien.

Pero tan pronto como dejas esa función, la primera (a)--y de nuevo, ten en cuenta, técnicamente en el orden de asignación, es la última-- "desaparece" (nuevamente, puedes ver esto en el depurador si establece un punto de interrupción en la segunda función), pero los otros dos (o los que agregue) aún están disponibles.

Esto se debe a que "let" SOLO SE APLICA A (por lo que solo se aplica localmente) LA PRIMERA VARIABLE, nuevamente, que técnicamente es la última en declararse y asignarse un valor, en la cadena. El resto técnicamente no tiene "let" delante de ellos. Entonces, técnicamente, se declaran globalmente (es decir, en el objeto global), razón por la cual aparecen en su segunda función.

Pruébelo: elimine la palabra clave "let". Todas sus vars ahora estarán disponibles.

"var" tiene un efecto de alcance local similar, pero difiere en cómo se "levanta" la variable, que es algo que definitivamente debe comprender, pero que no está directamente relacionado con su pregunta.

(Por cierto, esta pregunta desconcertaría a suficientes desarrolladores profesionales de JS para que sea una buena).

Sugerimos encarecidamente que dedique tiempo a las diferencias en cómo se pueden declarar las variables en JS: sin una palabra clave, con "let" y con "var".

over 4 years ago · Santiago Trujillo Report

0

En la función first() , las variables b y c se crean sobre la marcha, sin usar var o let .

 let a = b = c = 10; // b and c are created on the fly

es diferente a

 let a = 10, b = 10, c = 10; // b and c are created using let (note the ,)

Se vuelven implícitamente globales. Es por eso que están disponibles en second()

De la documentación

Asignar un valor a una variable no declarada la crea implícitamente como una variable global (se convierte en una propiedad del objeto global) cuando se ejecuta la asignación.

Para evitar esto, puede usar "use strict" que proporcionará errores cuando se use una variable no declarada

 "use strict"; // <-------------- check this function first() { /* * With "use strict" c is not defined. * (Neither is b, but since the line will be executed from right to left, * the variable c will cause the error and the script will stop) * Without, b and c become globals, and then are accessible in other functions */ let a = b = c = 10; var d = 20; second(); } function second() { console.log(b + ", " + c); //reference error console.log(a); //reference error console.log(d); //reference error } first();

over 4 years ago · Santiago Trujillo Report

0

Antes de llamar a las cosas extrañas, primero conozcamos algunos conceptos básicos:

var y let se usan para la declaración de variables en JavaScript. Por ejemplo,

 var one = 1; let two = 2;

Las variables también se pueden declarar sin usar var o let . Por ejemplo,

 three = 3;

Ahora, la diferencia entre los enfoques anteriores es que:

var tiene un alcance de función

y

let tiene un alcance de bloque.

mientras que el alcance de las variables declaradas sin la palabra clave var / let se vuelve global independientemente de dónde se declare.

Se puede acceder a las variables globales desde cualquier parte de la página web (no se recomienda porque las variables globales pueden modificarse accidentalmente).

Ahora, de acuerdo con estos conceptos, echemos un vistazo al código en cuestión:

 function first() { let a = b = c = 10; /* The above line means: let a=10; // Block scope b=10; // Global scope c=10; // Global scope */ var d = 20; // Function scope second(); } function second() { alert(b + ", " + c); // Shows "10, 10" //accessible because of global scope alert(a); // Error not accessible because block scope has ended alert(d); // Error not accessible because function scope has ended }
over 4 years ago · Santiago Trujillo 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!