var
Hoisting biến, giá trị mặc định undefined
Hoisting là một cơ chế trong JavaScript, trong đó trình thông dịch (interpreter) sẽ đưa phần khai báo (declaration) của biến, hàm, hoặc class lên đầu phạm vi (scope) trước khi thực thi code.
varBiến khai báo bằng var được đưa lên đầu phạm vi, nhưng giá trị thì giữ nguyên vị trí gán:
console.log(myVar); // undefinedvar myVar = 5;console.log(myVar); // 5
// Trình thông dịch hiểu như:// var myVar; ← Khai báo được hoisting// console.log(myVar); // undefined// myVar = 5; ← Gán giá trị giữ nguyên// console.log(myVar); // 5let và const (TDZ)Biến let/const cũng được hoisting, nhưng nằm trong Temporal Dead Zone (TDZ) — không thể truy cập trước khi khai báo:
console.log(myLet); // ReferenceErrorlet myLet = 10;
console.log(myConst); // ReferenceErrorconst myConst = 20;Function declaration được hoisting toàn bộ (bao gồm cả phần thân hàm), do đó có thể gọi hàm trước khi khai báo:
sayHello(); // "Hello!"
function sayHello() { console.log("Hello!");}var
Hoisting biến, giá trị mặc định undefined
let, const
Hoisting nhưng rơi vào TDZ, không thể truy cập trước khi khai báo
function declaration
Hoisting cả hàm (toàn bộ thân hàm)
function expression
Hoisting biến thôi, chưa gán giá trị nên không gọi được sớm