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

305
Vistas
¿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 Respuestas
Responde la pregunta

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 Denunciar

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 Denunciar

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