驴Cu谩l es la diferencia entre VAR, LET y CONST?
Antes de definir que es VAR, LET y CONST. Quiero explicarte qu茅 es una variable y para qu茅 se usan
Las variables son elementos fundamentales en la programaci贸n que se utilizan para almacenar y manipular datos. Puedes pensar en las variables como contenedores que guardan informaci贸n que puede ser utilizada y modificada a lo largo del programa.
驴Para qu茅 se usan?
- Almacenar datos que el programa necesita para funcionar.
- Manipular y procesar informaci贸n.
- Facilitar la legibilidad y mantenibilidad del c贸digo.
隆Dejando esto claro, ahora s铆 vamos con Var, Let, y Const!
Variable VAR
Alcance:
'var' tiene un alcance global o de funci贸n, lo que significa que si se declara dentro de una funci贸n, no puede ser accedida fuera de esa funci贸n. Sin embargo, si se declara fuera de una funci贸n, es accesible en cualquier parte del c贸digo.
function alcanceVar() {
var mensaje = "Dentro de la funci贸n";
if (true) {
var mensaje = "Dentro del bloque if"; // redeclara y reasigna la misma variable
console.log(mensaje); // "Dentro del bloque if"
}
console.log(mensaje); // "Dentro del bloque if" - la misma variable que en el if
}
alcanceVar();
console.log(mensaje); // Error: mensaje is not defined
Explicaci贸n
- Dentro de la funci贸n alcanceVar, var mensaje se declara y se asigna el valor "Dentro de la funci贸n".
- Dentro del bloque if, la variable mensaje se redeclara y reasigna a "Dentro del bloque if". Como var tiene alcance de funci贸n, esta declaraci贸n afecta a la misma variable mensaje.
- Fuera del if pero dentro de la funci贸n, la variable mensaje muestra "Dentro del bloque if", ya que fue reasignada dentro del if.
- Fuera de la funci贸n, intentar acceder a mensaje produce un error porque mensaje tiene alcance de funci贸n y no es accesible fuera de alcanceVar.
Hoisting:
Las declaraciones de var son "elevadas" al inicio del contexto de ejecuci贸n, lo que significa que puedes usar la variable antes de declararla (aunque su valor ser谩 undefined hasta que se asigne expl铆citamente).
function hoistingVar() {
console.log(mensaje); // undefined (debido al hoisting)
var mensaje = "Hola, Mundo!";
console.log(mensaje); // "Hola, Mundo!"
}
hoistingVar();
Explicaci贸n
- En el contexto de la funci贸n hoistingVar, la declaraci贸n var mensaje es elevada al inicio.
- Antes de la inicializaci贸n de mensaje, su valor es undefined.
- Despu茅s de la inicializaci贸n, mensaje tiene el valor "Hola, Mundo!".
Reasignaci贸n y Redeclaraci贸n
Puedes reasignar y redeclarar una variable declarada con var en el mismo 谩mbito sin errores.
function reasignacionRedeclaracionVar() {
var mensaje = "Primera declaraci贸n";
console.log(mensaje); // "Primera declaraci贸n"
mensaje = "Reasignaci贸n"; // reasignaci贸n permitida
console.log(mensaje); // "Reasignaci贸n"
var mensaje = "Redeclaraci贸n"; // redeclaraci贸n permitida
console.log(mensaje); // "Redeclaraci贸n"
}
reasignacionRedeclaracionVar();
Explicaci贸n
- Se declara la variable mensaje con el valor "Primera declaraci贸n".
- La variable mensaje se reasigna con el valor "Reasignaci贸n".
- La variable mensaje se redeclara y se asigna el valor "Redeclaraci贸n".
- Cada operaci贸n es permitida sin errores debido a las caracter铆sticas de var.
Ejemplo real VAR
function calcularInteresSimple() {
var principal = 1000; // cantidad principal
var tasaInteres = 0.05; // tasa de inter茅s anual
var tiempo = 2; // tiempo en a帽os
var interes = principal * tasaInteres * tiempo;
console.log("Inter茅s simple: " + interes); // "Inter茅s simple: 100"
}
calcularInteresSimple();
Nota Final
En la pr谩ctica, es mejor usar let o const para evitar problemas relacionados con el alcance y la redeclaraci贸n de variables. A煤n as铆, no descartes que podr铆as llegar a utilizar VAR en alg煤n proyecto que as铆 te lo requiera.
ECMAScript 2015 (ES6) Y la introcucci贸n a las variables LET y CONST
Las variables let y const se introdujeron en la especificaci贸n ECMAScript 6 (ES6), tambi茅n conocida como ECMAScript 2015. La especificaci贸n fue finalizada en junio de 2015.
La introducci贸n de let y const en ES6 ten铆a como objetivo solucionar varios problemas y limitaciones asociadas con el uso de var en JavaScript, mejorando as铆 la legibilidad, mantenimiento y seguridad del c贸digo.
Variable LET
Alcance:
'var' tiene un alcance global o de funci贸n, lo que significa que si se declara dentro de una funci贸n, no puede ser accedida fuera de esa funci贸n. Sin embargo, si se declara fuera de una funci贸n, es accesible en cualquier parte del c贸digo.
function ejemploAlcance() {
let mensaje = "Fuera del bloque if";
if (true) {
let mensaje = "Dentro del bloque if"; // nueva variable con el mismo nombre dentro del bloque
console.log(mensaje); // "Dentro del bloque if"
}
console.log(mensaje); // "Fuera del bloque if"
}
ejemploAlcance();
Explicaci贸n
- Dentro de la funci贸n ejemploAlcance, se declara let mensaje con el valor "Fuera del bloque if"
- Dentro del bloque if, se declara otra let mensaje con el valor "Dentro del bloque if". Esta variable es diferente a la de fuera del bloque if porque let tiene alcance de bloque
- Cuando se imprime mensaje dentro del bloque if, el valor es "Dentro del bloque if"
- Cuando se imprime mensaje fuera del bloque if pero dentro de la funci贸n, el valor sigue siendo "Fuera del bloque if" porque las dos variables mensaje son distintas
Hoisting:
Las declaraciones de var son "elevadas" al inicio del contexto de ejecuci贸n, lo que significa que puedes usar la variable antes de declararla (aunque su valor ser谩 undefined hasta que se asigne expl铆citamente).
function ejemploHoisting() {
console.log(mensaje); // Error: Cannot access 'mensaje' before initialization
let mensaje = "Hola, Mundo!";
console.log(mensaje); // "Hola, Mundo!"
}
ejemploHoisting();
Explicaci贸n
- En el contexto de la funci贸n ejemploHoisting, la declaraci贸n let mensaje no es accesible antes de su inicializaci贸n, lo que causa un error
- A diferencia de var, las variables declaradas con let no se pueden usar antes de su declaraci贸n debido al hoisting temporal
- El primer console.log lanza un error porque mensaje no est谩 inicializada
- El segundo console.log imprime "Hola, Mundo!" porque la variable mensaje ha sido inicializada
Reasignaci贸n y Redeclaraci贸n
Puedes reasignar y redeclarar una variable declarada con var en el mismo 谩mbito sin errores.
function ejemploReasignacionRedeclaracion() {
let mensaje = "Primera declaraci贸n";
console.log(mensaje); // "Primera declaraci贸n"
mensaje = "Reasignaci贸n"; // reasignaci贸n permitida
console.log(mensaje); // "Reasignaci贸n"
let mensaje = "Redeclaraci贸n"; // Error: Identifier 'mensaje' has already been declared
console.log(mensaje); // Este c贸digo no se ejecuta
}
ejemploReasignacionRedeclaracion();
Explicaci贸n
- Se declara la variable mensaje con el valor "Primera declaraci贸n"
- La variable mensaje se reasigna con el valor "Reasignaci贸n", lo cual es permitido con let
- Intentar redeclarar mensaje dentro del mismo 谩mbito con let causa un error: "Identifier 'mensaje' has already been declared
- La reasignaci贸n es permitida, pero la redeclaraci贸n dentro del mismo 谩mbito no lo es con let
function actualizarInventario() {
let inventario = 100; // Inventario inicial
console.log(`Inventario inicial: ${inventario}`);
// Simulaci贸n de ventas
for (let i = 0; i < 5; i++) {
let venta = Math.floor(Math.random() * 10) + 1; // Ventas aleatorias entre 1 y 10
inventario -= venta; // Actualizamos el inventario
console.log(`Venta: ${venta} unidades, Inventario restante: ${inventario}`);
}
}
actualizarInventario();
Nota Final
Let proporciona una forma m谩s segura y controlada de manejar variables que cambian de valor dentro de un 谩mbito espec铆fico, evitando problemas comunes asociados con var como el hoisting no esperado y el alcance global de funci贸n.
Variable CONST
Alcance:
'const' tambi茅n tiene un alcance de bloque, similar a let.
function ejemploAlcance() {
const mensaje = "Fuera del bloque if";
if (true) {
const mensaje = "Dentro del bloque if"; // nueva variable con el mismo nombre dentro del bloque
console.log(mensaje); // "Dentro del bloque if"
}
console.log(mensaje); // "Fuera del bloque if"
}
ejemploAlcance();
- Se declara la variable mensaje con el valor "Primera declaraci贸n"
- La variable mensaje se reasigna con el valor "Reasignaci贸n", lo cual es permitido con let
- Intentar redeclarar mensaje dentro del mismo 谩mbito con let causa un error: "Identifier 'mensaje' has already been declared
- La reasignaci贸n es permitida, pero la redeclaraci贸n dentro del mismo 谩mbito no lo es con let
Hoisting:
Al igual que let, las declaraciones de const son elevadas pero no inicializadas, resultando en un error si se accede a ellas antes de la declaraci贸n.
function ejemploHoisting() {
console.log(mensaje); // Error: Cannot access 'mensaje' before initialization
const mensaje = "Hola, Mundo!";
console.log(mensaje); // "Hola, Mundo!"
}
ejemploHoisting();
- Se declara la variable mensaje con el valor "Primera declaraci贸n"
- La variable mensaje se reasigna con el valor "Reasignaci贸n", lo cual es permitido con let
- Intentar redeclarar mensaje dentro del mismo 谩mbito con let causa un error: "Identifier 'mensaje' has already been declared
- La reasignaci贸n es permitida, pero la redeclaraci贸n dentro del mismo 谩mbito no lo es con let
Reasignaci贸n y Redeclaraci贸n
No puedes reasignar ni redeclarar una variable declarada con const. Debe ser inicializada en el momento de su declaraci贸n y su valor no puede cambiar. Sin embargo, si el valor es un objeto o un array, puedes modificar sus propiedades o elementos.
function ejemploReasignacionRedeclaracion() {
const mensaje = "Primera declaraci贸n";
console.log(mensaje); // "Primera declaraci贸n"
mensaje = "Reasignaci贸n"; // Error: Assignment to constant variable
console.log(mensaje); // Este c贸digo no se ejecuta
const mensaje = "Redeclaraci贸n"; // Error: Identifier 'mensaje' has already been declared
console.log(mensaje); // Este c贸digo no se ejecuta
}
ejemploReasignacionRedeclaracion();
- Se declara la variable mensaje con el valor "Primera declaraci贸n"
- La variable mensaje se reasigna con el valor "Reasignaci贸n", lo cual es permitido con let
- Intentar redeclarar mensaje dentro del mismo 谩mbito con let causa un error: "Identifier 'mensaje' has already been declared
- La reasignaci贸n es permitida, pero la redeclaraci贸n dentro del mismo 谩mbito no lo es con let
function gestionarInventario() {
const capacidadMaxima = 500; // Capacidad m谩xima del almac茅n
let inventario = 300; // Inventario inicial
console.log(`Capacidad m谩xima: ${capacidadMaxima}`);
console.log(`Inventario inicial: ${inventario}`);
// Intentar cambiar la capacidad m谩xima causar谩 un error
// capacidadMaxima = 600; // Error: Assignment to constant variable
// Simulaci贸n de entradas de inventario
let entrada = 50; // Nuevas unidades ingresadas
inventario += entrada;
console.log(`Inventario despu茅s de entrada: ${inventario}`);
}
gestionarInventario();
Nota Final
Const proporciona una forma clara y segura de declarar variables que deben mantenerse constantes, mejorando la legibilidad y robustez del c贸digo.