Summary of Differences.
If you, like me, are tired of this interview question.
Scope:
var: Function or global scope.
let: Block scope.
const: Block scope.
Hoisting:
var: Hoisted and initialized with undefined.
let: Hoisted but not initialized (temporal dead zone).
const: Hoisted but not initialized (temporal dead zone).
Re-declaration:
var: Can be re-declared within the same scope.
let: Cannot be re-declared within the same scope.
const: Cannot be re-declared within the same scope.
Immutability:
var and let: Mutable references.
const: Immutable reference (the reference cannot change, but the value can if it's an object).
Examples
var
function varExample() {
console.log(x); // undefined (due to hoisting)
var x = 10;
if (true) {
var x = 20; // Same variable, function-scoped
console.log(x); // 20
}
console.log(x); // 20 (same variable as above)
}
varExample();
let
function letExample() {
// console.log(y); // ReferenceError (temporal dead zone)
let y = 10;
if (true) {
let y = 20; // Different variable, block-scoped
console.log(y); // 20
}
console.log(y); // 10 (original variable)
}
letExample();
const
function constExample() {
// console.log(z); // ReferenceError (temporal dead zone)
const z = 10;
if (true) {
const z = 20; // Different variable, block-scoped
console.log(z); // 20
}
console.log(z); // 10 (original variable)
const obj = { name: "Alice" };
obj.name = "Bob"; // Allowed (the object itself is mutable)
console.log(obj.name); // Bob
// obj = { name: "Charlie" }; // TypeError (can't reassign const)
}
constExample();
Top comments (0)