Hoisting là hành động của trình thông dịch JavaScript để di chuyển tất cả các khai báo biến và hàm lên top của phạm vi hiện tại (current scope). Có hai loại hoisting:
Bất cứ khi nào một var (hoặc khai báo hàm) xuất hiện bên trong một phạm vi, thì khai báo đó được coi là thuộc về toàn bộ phạm vi và có thể truy cập ở mọi nơi trong phạm vi đó.
var a = 2;
foo(); // works because `foo()`
// declaration is "hoisted"
function foo() {
a = 3;
console.log( a ); // 3
var a; // declaration is "hoisted"
// to the top of `foo()`
}
console.log( a ); // 2