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)