Hoisting trong JavaScript

Nâng lên (Hoisting) là hành vi mặc định của JavaScript khi di chuyển các khai báo lên trên.

Khai báo của JavaScript sẽ được nâng lên

Trong JavaScript, bạn có thể khai báo biến sau khi sử dụng nó.

Nói cách khác, bạn có thể sử dụng nó trước khi khai báo biến.

Ví dụ 1 vớiVí dụ 2 kết quả là như nhau:

Ví dụ 1

x = 5; // Gán giá trị 5 cho x
elem = document.getElementById("demo"); // Tìm kiếm phần tử
elem.innerHTML = x;                     // Hiển thị x trong phần tử
var x; // Khai báo x

Thử nghiệm ngay lập tức

Ví dụ 2

var x; // Khai báo x
x = 5; // Gán giá trị 5 cho x
elem = document.getElementById("demo"); // Tìm kiếm phần tử
elem.innerHTML = x;                     // Hiển thị x trong phần tử

Thử nghiệm ngay lập tức

Để hiểu điều này, bạn phải hiểu thuật ngữ "hoisting".

Hoisting là hành vi mặc định của JavaScript khi nâng tất cả các khai báo lên đầu của khu vực hoạt động hiện tại (nâng lên đầu của tập lệnh hoặc hàm hiện tại).

ký tự khóa let và const

sử dụng let hoặc const Các biến được khai báo và các hằng số sẽ không được nâng lên!

Vui lòng JS Let / Const Để đọc thêm về let và const, hãy xem tại đây.

Khởi tạo của JavaScript sẽ không được nâng lên

JavaScript chỉ nâng lên các khai báo, không phải là khởi tạo.

Ví dụ 1 vớiVí dụ 2 kết quả không giống nhau:

Ví dụ 1

var x = 5; // Khởi tạo x
var y = 7; // Khởi tạo y
elem = document.getElementById("demo"); // Tìm kiếm phần tử
elem.innerHTML = x + " " + y;           // Hiển thị x và y

Thử nghiệm ngay lập tức

Ví dụ 2

var x = 5; // Khởi tạo x
elem = document.getElementById("demo"); // Tìm kiếm phần tử
elem.innerHTML = x + " " + y;           // Hiển thị x và y
var y = 7; // Khởi tạo y 

Thử nghiệm ngay lập tức

Vậy trong ví dụ cuối cùng, y vẫn là giá trị không xác định có hợp lý không?

Đây là vì chỉ có khai báo (var y) mà không phải là khởi tạo (=7) mới được nâng lên trên cùng.

Do hoisting, y đã được khai báo trước khi sử dụng, nhưng do chưa nâng cao giá trị khởi tạo, giá trị của y vẫn là chưa định nghĩa.

Ví dụ 2 cũng vậy:

Ví dụ

var x = 5; // Khởi tạo x
var y;     // Khai báo y
elem = document.getElementById("demo"); // Tìm kiếm phần tử
elem.innerHTML = x + " " + y;           // Hiển thị x và y
y = 7;    // Gán giá trị 7 cho y

Thử nghiệm ngay lập tức

Khai báo biến của bạn ở trên!

Hoisting (đối với nhiều nhà phát triển) là một hành vi không được biết đến hoặc bị bỏ qua của JavaScript.

Nếu nhà phát triển không hiểu hoisting, chương trình có thể chứa lỗi (lỗi).

Để tránh lỗi, hãy luôn khai báo tất cả các biến ở đầu mỗi phạm vi.

Do đây là cách mà JavaScript giải thích mã, vì vậy hãy duy trì thói quen tốt này.

Chế độ严格 của JavaScript không cho phép sử dụng biến mà không được khai báo.

Hãy học tiếp ở chương tiếp theouse strict”。