Nâng cao JavaScript
Hoisting là hành vi mặc định của JavaScript trong việc di chuyển các khai báo lên trên cùng.
Khai báo JavaScript được nâng lên
Trong JavaScript, một biến có thể được khai báo sau khi nó được sử dụng.
Nói cách khác; một biến có thể được sử dụng trước khi nó được khai báo.
Ví dụ 1 cho kết quả tương tự như Ví dụ 2 :
ví dụ 1
x = 5; // Assign 5 to x
elem = document.getElementById("demo"); // Find an element
elem.innerHTML = x;
// Display x in the element
var x; // Declare x
Hãy tự mình thử »Ví dụ 2
var x; // Declare x
x = 5; // Assign 5 to x
elem = document.getElementById("demo"); // Find an element
elem.innerHTML = x;
// Display x in the element
Hãy tự mình thử »Để hiểu điều này, bạn phải hiểu thuật ngữ "cẩu".
Hoisting là hành vi mặc định của JavaScript nhằm di chuyển tất cả các khai báo lên đầu phạm vi hiện tại (lên đầu tập lệnh hiện tại hoặc hàm hiện tại).
Từ khóa let và const
Các biến được xác định bằng let
và const
được đưa lên đầu khối, nhưng không được khởi tạo .
Ý nghĩa: Khối mã nhận biết được biến nhưng không thể sử dụng nó cho đến khi nó được khai báo.
Việc sử dụng biến let
trước khi nó được khai báo sẽ dẫn đến lỗi ReferenceError
.
Biến nằm trong "vùng chết tạm thời" từ đầu khối cho đến khi được khai báo:
Sử dụng biến const
trước khi nó được khai báo là một lỗi cú pháp, do đó mã sẽ không chạy.
Đọc thêm về let và const trong JS Let/Const .
Việc khởi tạo JavaScript không được nâng lên
JavaScript chỉ nâng cao các khai báo chứ không phải khởi tạo.
Ví dụ 1 không cho kết quả giống ví dụ 2 :
ví dụ 1
var x = 5; // Initialize x
var y = 7; // Initialize y
elem = document.getElementById("demo"); // Find an element
elem.innerHTML = x + " " + y; // Display x and y
Hãy tự mình thử »Ví dụ 2
var x = 5; // Initialize x
elem = document.getElementById("demo"); // Find an element
elem.innerHTML = x + " " + y; // Display x and y
var y = 7; // Initialize y
Hãy tự mình thử »Việc y không được xác định trong ví dụ trước có hợp lý không?
Điều này là do chỉ có phần khai báo (var y), chứ không phải phần khởi tạo (=7) được đưa lên trên cùng.
Bởi vì hoisting, y đã được khai báo trước khi nó được sử dụng, nhưng vì việc khởi tạo không được hoisting nên giá trị của y không được xác định.
Ví dụ 2 tương tự như cách viết:
Ví dụ
var x = 5; // Initialize x
var y; // Declare y
elem = document.getElementById("demo"); // Find an element
elem.innerHTML = x + " " + y; // Display x and y
y = 7; // Assign 7 to y
Hãy tự mình thử »Khai báo các biến của bạn ở trên cùng!
Hoisting (đối với nhiều nhà phát triển) là một hành vi chưa được biết đến hoặc bị bỏ qua của JavaScript.
Nếu nhà phát triển không hiểu về hoisting, các 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.
Vì đây là cách JavaScript diễn giải mã nên đây luôn là một quy tắc tốt.
JavaScript ở chế độ nghiêm ngặt không cho phép sử dụng các biến nếu chúng không được khai báo.
Nghiên cứu "sử dụng nghiêm ngặt" trong chương tiếp theo.