Hoisting nghĩa là JavaScript xử lý phần khai báo trước khi chạy code theo dòng.
Hiểu theo hành vi:
- var: được hoist và khởi tạo undefined.
- function declaration: hoist cả thân hàm, gọi trước vẫn được.
- let/const: cũng hoist nhưng chưa khởi tạo, truy cập sớm sẽ lỗi (TDZ).
javascript
console.log(a); // undefined (var hoisted)
console.log(b); // ReferenceError (let TDZ)
var a = 1;
let b = 2;
fn(); // hoạt động bình thường
function fn() { return "hoisted"; }Vì vậy var có thể trông như chạy được nhưng dễ gây bug khó debug.