JavaScript Hoisting (với Ví dụ)

Trong hướng dẫn này, bạn sẽ tìm hiểu về JavaScript lưu trữ với sự trợ giúp của các ví dụ.

Hoisting trong JavaScript là một hành vi trong đó một hàm hoặc một biến có thể được sử dụng trước khi khai báo. Ví dụ,

 // using test before declaring console.log(test); // undefined var test;

Chương trình trên hoạt động và đầu ra sẽ không xác định. Chương trình trên hoạt động như

 // using test before declaring var test; console.log(test); // undefined

Vì kiểm tra biến chỉ được khai báo và không có giá trị, nên undefinedgiá trị được gán cho nó.

Nếu bạn muốn tìm hiểu thêm về các biến, hãy truy cập Biến JavaScript.

Lưu ý : Trong hoisting, mặc dù có vẻ như khai báo đã được chuyển lên trong chương trình, điều thực tế xảy ra là khai báo hàm và biến được thêm vào bộ nhớ trong giai đoạn biên dịch.

Tời nâng

Trong điều kiện của các biến và hằng số, từ khóa varđược kéo lên và letconstkhông cho phép cẩu.

Ví dụ,

 // program to display value a = 5; console.log(a); var a; // 5

Trong ví dụ trên, biến a được sử dụng trước khi khai báo nó. Và chương trình hoạt động và hiển thị kết quả đầu ra 5. Chương trình hoạt động như sau:

 // program to display value var a; a = 5; console.log(a); // 5

Tuy nhiên trong JavaScript, các khởi tạo không được lưu trữ. Ví dụ,

 // program to display value console.log(a); var a = 5;

Đầu ra

 chưa xác định

Chương trình trên hoạt động như sau:

 var a; console.log(a); a = 5;

Chỉ phần khai báo được chuyển đến bộ nhớ trong giai đoạn biên dịch. Do đó, giá trị của biến a là undefineddo a được in ra mà không cần khởi tạo nó.

Ngoài ra, khi biến được sử dụng bên trong hàm, biến chỉ được nâng lên đầu của hàm. Ví dụ,

 // program to display value var a = 4; function greet() ( b = 'hello'; console.log(b); // hello var b; ) greet(); // hello console.log(b);

Đầu ra

 xin chào Uncaught ReferenceError: b không được định nghĩa

Trong ví dụ trên, biến b được đưa lên đầu của hàm greetvà trở thành một biến cục bộ. Do đó b chỉ có thể truy cập được bên trong hàm. b không trở thành một biến toàn cục.

Để tìm hiểu thêm về các biến cục bộ và toàn cục, hãy truy cập Phạm vi biến JavaScript.

Lưu ý : Trong hoists, khai báo biến chỉ có thể truy cập vào phạm vi tức thời.

Nếu một biến được sử dụng với lettừ khóa, thì biến đó không được lưu vào. Ví dụ,

 // program to display value a = 5; console.log(a); let a; // error

Đầu ra

 Uncaught ReferenceError: Không thể truy cập 'a' trước khi khởi chạy

Trong khi sử dụng let, biến phải được khai báo trước.

Chức năng nâng

Một hàm có thể được gọi trước khi khai báo nó. Ví dụ,

 // program to print the text greet(); function greet() ( console.log('Hi, there.'); )

Đầu ra

 Xin chào

Trong chương trình trên, hàm greetđược gọi trước khi khai báo và chương trình hiển thị kết quả đầu ra. Điều này là do cẩu.

Tuy nhiên, khi một hàm được sử dụng như một biểu thức , một lỗi sẽ xảy ra vì chỉ có các khai báo mới được lưu vào. Ví dụ;

 // program to print the text greet(); let greet = function() ( console.log('Hi, there.'); )

Đầu ra

 Uncaught ReferenceError: welcome không được định nghĩa

Nếu varđược sử dụng trong chương trình trên, lỗi sẽ là:

 Uncaught TypeError: welcome không phải là một hàm

Lưu ý : Nói chung, quá trình lưu trữ không được thực hiện trong các ngôn ngữ lập trình khác như Python, C, C ++, Java.

Việc treo có thể gây ra kết quả không mong muốn trong chương trình của bạn. Và tốt nhất là bạn nên khai báo biến và hàm trước khi sử dụng chúng và tránh trường hợp bị treo.

Trong trường hợp của các biến, nó là tốt hơn để sử dụng lethơn var.

thú vị bài viết...