Diferencia entre var y dejar en JavaScript?

JavaScript var vs Let : En este tutorial, vamos a aprender acerca de las diferencias entre var y dejar en JavaScript .

Puede definir sus variables en JavaScript utilizando dos palabras clave – la vamos palabra clave y la palabra clave var . La palabra clave var es la forma más antigua de la definición y la declaración de variables en JavaScript mientras que el dejar que es bastante nuevo y se introdujo por ES15.

En este artículo, vamos a ver las diferencias entre los dos para que sepa cuándo usar el que class sus variables.

Abra la consola de Chrome dev para probar los ejemplos haciendo clic derecho en el navegador y rarr; seleccionar inspeccionar y rarr; la selección de la consola o simplemente tipo F12.

Ejemplo 1:

var size=32;
console.log(size);

salida

32

Ejemplo 2:

var size=63;
console.log(size);

salida

63

declaramos un tamaño variable con un valor 32 . Luego volver a declarar con otro valor, 63 . Todo se ve bien hasta ahora.

let length=14;
console.log(length);

salida

14

let length=14;
let length=20; //will produce error
console.log(length);

salida

Uncaught SyntaxError: Identifier 'length' has already been declared
at <anonymous>:1:1

let length=14;
length=20; //no produce error
console.log(length);

salida

20

Ahora vamos a crear una variable longitud con un valor 14 pero esta vez utilizando la palabra clave dejó . Cuando redeclare la misma variable con otro valor que obtenemos un SyntaxError diciendo que ya ha sido declarada. El primer punto de diferencia entre dejar que y var es que el uso de var podemos redeclare esas variables pero con vamos , sólo podemos redefinir ellos, no redeclararlas. Cuando reasignar el valor 20 a la variable longitud , obtenemos ningún error en la consola y nuestra longitud variable toma felizmente un nuevo valor.

var ironMan = 'red';
var captainAmerica = 'blue';
if (ironMan === 'red') {
var ironMan = 'silver';
let captainAmerica = 'golden';
console.log(ironMan);
console.log(captainAmerica);
}

salida

silver
Golden

var ironMan = 'red';
var captainAmerica = 'blue';
if (ironMan === 'red') {
var ironMan = 'silver';
let captainAmerica = 'golden';
console.log(ironMan);
console.log(captainAmerica);
}

salida

silver
Blue

El siguiente diferencia entre los dos es el alcance. Se puede observar en el código anterior que CaptainAmerica se declara de nuevo en el interior mediante el dejó palabra clave con un valor ‘oro’ y en el interior que si el bloque que persiste ese valor, sin embargo, fuera de que si el bloque cuando ingrese su valor a la consola obtenemos el valor más antiguo ‘azul’ que se definió si fuera del bloque. Por lo tanto las variables declaradas usando la ámbito de bloque dejar que la palabra clave Have. Por otra parte, hemos cambiado el valor de Ironman en el interior del bloque y si se sigue manteniendo ese valor, incluso después de que el bloque de si ha terminado. Podemos decir que var toma el alcance de la misma del contexto de ejecución que encierra lo que puede ser una función o incluso el ámbito global como en este for.

Heads up: se introdujo La razón dejar que era evitar el uso de variables globales y espacios de nombres en todas partes. Es un mal, no esperar, el hábito de programación terrible. Evitar el uso de variables globales en su alcance mundial hace absurdo. Uso dejó siempre que sea posible.

class, la última diferencia que quiero hablar es de elevación. Considere el siguiente fragmento de código,

x = 5;
console.log(x);
var x;

salida

5

Si ha trabajado con lenguajes como C / C ++ le puede resultar extraño. En estos idiomas, se puede esperar un error que dice algo así como x no está definido porque compilador lee de arriba a abajo. Así se ejecuta JS también de arriba a abajo? Bueno, si lo fuera, no sería capaz de hacerlo. Entonces ¿cómo es que podemos usar una variable, y os lo más tarde? La respuesta iza. medios de movimiento de todas las declaraciones a la parte superior de elevación. Esto significa que mientras se ejecuta el código, todas las declaraciones de variables están en la parte superior por lo que hasta el momento que llegan a x = 5 línea que ya sabe que x ha sido declarado en alguna parte variable del programa.

y = 3;
function setRandom(y) {
console.log('Before declaring y: ', y);
}
setRandom();
var y;
console.log('After declaring y: ', y);

salida

Before declaring y:  undefined
After declaring y: 3

intento Vamos a izar una variable usando let,

x = 5;
console.log(x);
let x;

salida

VM2466:1 Uncaught ReferenceError: Cannot access 'x' before initialization
at <anonymous>:1:2

Obtenemos un error diciendo que no podemos acceder a ella antes de que se incluso está inicializado. Así se declaran las variables con la palabra clave vamos no izada? Ellos son, pero están izadas en una zona muerta temporal. Una zona donde se puede utilizar variables que no se han definido todavía.

Nota: si está utilizando el modo estricto en su Javascript a continuación, usted es más probable que se ejecute en conseguir valores indefinidos class tales tipos de código, porque el modo estricto no permite ninguna elevación a tener lugar.

Así es izado en TDZ inútil? Bueno, no realmente, consideremos el siguiente ejemplo usando una función asíncrona.

for (var i = 0; i < 3; i++) {
setTimeout(function() {
console.log(i);
}, 1000)
}

salida

3

Fuera setTimeout es una función asíncrona y después de 1 seg imprime el valor de i que se incrementa 4 veces mientras que la función asíncrona estaba en marcha. Sin embargo, si usamos dejar que en lugar de var ,

for (let i = 0; i < 3; i++) {
setTimeout(function() {
console.log(i);
}, 1000)
}

salida

0
1
2

Ahora tenemos todos los valores que i tomó durante ese recorrido en bucle. Esto es debido a la TDZ o la zona muerta temporal donde dejar que se iza. De este modo asíncrono utilizando puede ayudar a conservar sus valores a través de de elevación TDZ si utiliza dejar que en lugar de var . No olvide limpiar el código mediante la sustitución de todos los var con dejó y que sea una buena práctica para el uso de bloques de ámbitos en lugar de alcances mundiales!


Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *