Cơ chế hoạt động của Hoisting trong JavaScript
Javascript căn bản | by
Trong JavaScript, Hoisting là một cơ chế đặc biệt giúp trình thông dịch có thể "kéo" các khai báo biến và hàm lên đầu phạm vi trước khi thực thi mã. Điều này có nghĩa là bạn có thể sử dụng một biến hoặc một hàm trước khi nó được khai báo trong mã nguồn. Tuy nhiên, cơ chế này không hoạt động giống nhau đối với tất cả các loại khai báo, và nếu không hiểu rõ, bạn có thể gặp phải những lỗi khó đoán.
Vậy Hoisting hoạt động như thế nào? Sự khác biệt giữa Hoisting của var, let, const, Function Declaration và Function Expression là gì? Làm thế nào để tránh các lỗi phổ biến do Hoisting gây ra? Hãy cùng tìm hiểu chi tiết trong bài viết này!
Hoisting trong JavaScript là gì?
Hoisting là một cơ chế trong JavaScript mà trình thông dịch sẽ đưa các khai báo biến và hàm lên đầu phạm vi của chúng trước khi mã được thực thi. Điều này có nghĩa là bạn có thể sử dụng một biến hoặc một hàm trước khi nó được khai báo trong mã nguồn mà không gặp lỗi.
Tuy nhiên, hoisting không thực sự di chuyển code, mà chỉ giúp trình biên dịch xử lý các khai báo trước khi thực thi code.
Ảnh hưởng của Hoisting đến quá trình thực thi mã JavaScript
Hoisting ảnh hưởng đến biến và hàm theo các cách khác nhau:
- Biến được khai báo bằng
var
: Được hoisting nhưng giá trị của chúng mặc định làundefined
. - Biến được khai báo bằng
let
vàconst
: Cũng được hoisting nhưng không thể sử dụng trước khi khai báo do "Temporal Dead Zone" (TDZ). - Hàm được khai báo bằng Function Declaration: Được hoisting hoàn toàn và có thể sử dụng trước khi khai báo.
- Hàm được khai báo bằng Function Expression hoặc Arrow Function: Chỉ hoisting phần khai báo biến, nhưng không hoisting phần gán giá trị.
Ví dụ minh họa về Hoisting
Ví dụ 1: Hoisting với var
console.log(a); // undefined var a = 10; console.log(a); // 10