In JavaScript, let, const, and var are used to declare variables, but they are different in three ways:
1. Scope
2. Reassignment
3. Hoisting
1.Scope:
var is a functional scope means we access var variable anywhere within the function if we try access it outside function it will show error undefined
Example:-
function demo(){
if(true){
var n = 3;
}
console.log(n)
}
console.log(n) //ReferenceError: n is not defined
demo();
let & const are block means we can access them within the scope only otherwise it will show undefined error
Example:-
if(true){
let n = 3;
const m = 5;
console.log(n) // 3
console.log(m) // 5
}
console.log(n) //ReferenceError: n is not defined
console.log(m) //ReferenceError: n is not defined
}
console.log(n) //ReferenceError: n is not defined
console.log(m) //ReferenceError: n is not defined
demo();
2.Reassignment
var: Can be reassigned and redeclared within its scope.
let: Can be reassigned but not redeclared within its scope.
const: Cannot be reassigned or redeclared. The variable itself is immutable, though objects and arrays assigned to const can still be modified
.
3.Hoisting
var is hoisted, meaning it’s accessible before its declaration, but its value will be undefined until the code reaches the line where the variable is initialized.
let is also hoisted, but unlike var, it cannot be accessed before its declaration due to the “temporal dead zone.”
Variables declared with const are also hoisted but must be initialized at the time of declaration and cannot be reassigned. However, if the variable is an object or array, its contents can be modified (e.g., adding or removing items from an array).
console.log(a); // undefined (due to hoisting)
var a = 10;
console.log(a); // 10
// let example
console.log(b); // ReferenceError: Cannot access ‘b’ before initialization
let b = 20;
console.log(b); // 20
// const example
const c = 30;
c = 40; // TypeError: Assignment to constant variable