JavaScript Hoisting
Hoisting là hành vi mặc định của JavaScript để di chuyển các khai báo lên trên cùng.
Khai báo JavaScript được liệt kê
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
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
Để 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 là 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 nó không thể được sử dụng cho đến khi nó đã được khai báo.
Sử dụng một let
biến trước khi nó được khai báo sẽ dẫn đến a
ReferenceError
.
Biến nằm trong "vùng chết tạm thời" từ khi bắt đầu khối cho đến khi nó được khai báo:
Thí dụ
Điều này sẽ dẫn đếnReferenceError
:
carName = "Volvo";
let carName;
Việc sử dụng một const
biến trước khi nó được khai báo là một lỗi cú pháp, vì vậy mã sẽ không chạy.
Thí dụ
Mã này sẽ không chạy.
carName = "Volvo";
const carName;
Đọc thêm về let và const trong JS Let / Const .
Khởi tạo JavaScript không được liệt kê
JavaScript chỉ lưu trữ các khai báo, không lưu trữ các khởi tạo.
Ví dụ 1 không cho kết quả tương tự như 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
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
Có hợp lý không khi y không được xác định trong ví dụ cuối cùng?
Điều này là do chỉ phần khai báo (var y), không phải phần khởi tạo (= 7) được đưa lên đầu.
Do tính năng nâng cao, nên y đã được khai báo trước khi sử dụng, nhưng vì các khởi tạo không được nâng lên nên giá trị của y là không xác định.
Ví dụ 2 tương tự như cách viết:
Thí 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
Khai báo các biến của bạn ở đầu!
Hoisting là (đối với nhiều nhà phát triển) là một hành vi không xác định hoặc bị bỏ qua của JavaScript.
Nếu một nhà phát triển không hiểu về lưu trữ, 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 nó luôn là một quy tắc tốt.
JavaScript ở chế độ nghiêm ngặt không cho phép các biến được sử dụng 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.