Hoisting là một đặc điểm của JavaScript, cho phép một biến được sử dụng trước khi được khai báo. Khi JavaScript tạo ra một scope mới, nó sẽ "nâng lên" (hoist) tất cả các biến được khai báo trong phạm vi đó đến trên cùng của phạm vi đó.
Ví dụ:
console.log(name); // undefined
var name = "vietanhjs";
Trong ví dụ trên, biến name được hoisted lên đầu của scope, nên nó có thể được truy cập trước khi được gán giá trị. Tuy nhiên, giá trị của biến là undefined trong lúc này.
Tuy nhiên, hoisting chỉ xảy ra với các biến được khai báo bằng var, và không xảy ra với let và const. Nếu bạn sử dụng một biến được khai báo bằng let hoặc const trước khi được khai báo, sẽ gặp một lỗi "ReferenceError".
Ví dụ:
console.log(name); // ReferenceError: age is not defined
let name = "vietanhjs";