Hướng dẫn hoisting functions javascript - chức năng hosts javascript
Show
Đã đăng vào thg 11 27, 2017 3:11 SA 3 phút đọc 3 phút đọc Bài viết hôm nay của mình để cập đến một tính chất của Javascript đó là Hoisting, vậy Hoisting là gì ?? Hoisting của biến và của hàm khác gì nhau ?? Chúng ta sẽ làm rất rất nhiều ví dụ bên dưới để hiểu rõ hơn nhé (ok)1. Javacript Hoisting?Bắt đầu với ví dụ 1 nào (len)
Kết quả không có gì lạ: raise lỗi 8, bởi biến 9 chưa được khai báo ở đâu cảVí dụ 2:
Ví dụ này có vẻ phức tạp hơn ví dụ trên "rất nhiều" nhưng kết quả vẫn chỉ có một: 8Ví dụ 3:
Output sẽ là 1 vì 9 đã được khai báo nhưng vẫn chưa được gán giá trịVí dụ 4
Thật tình cờ và thật bất ngờ, kết quả ra trùng với 3, đều là 1 Tại sao lại như vậy ???Định nghĩaHoisting là hành động mặc định của Javascript, nó sẽ chuyển phần khai báo lên phía trên top Trong Javascript, một biến (variable) có thể được khai báo sau khi được sử dụng Chúng ta sẽ tiếp tục làm 5 và phần giải thích làm rõ hơn cho ví dụ 4.
Kết quả sẽ được diễn giải theo sơ đồ sau: Giải thích: Giải thích:
2. Hoisting of function?Định nghĩaHoisting là hành động mặc định của Javascript, nó sẽ chuyển phần khai báo lên phía trên top Trong Javascript, một biến (variable) có thể được khai báo sau khi được sử dụng
Chúng ta sẽ tiếp tục làm 5 và phần giải thích làm rõ hơn cho ví dụ 4.Kết quả sẽ được diễn giải theo sơ đồ sau: Giải thích:
Trình biên dịch của Javascript sẽ phân tách phần 6 thành 2 phần là khai báo và gán giá trịKhai báo: 7
2. Hoisting of function? Trình biên dịch Javascript sẽ chuyển phần khai báo lên trên top giống như cách làm với biến. Ví dụ 6:Output cũng giống như với phần biến #Ex4: console.log(a); var a; 0Ví dụ 7: Ví dụ 8:
Kết quả sẽ được diễn giải theo sơ đồ sau: Giải thích: Cũng giống như với phần 1, phần bên trong của hàm 1 cũng được trình biên dịch sử dụng 2.
Nhưng phần khai báo chỉ được chuyển lên trên top của hàm 1 chứ không phải của chương trìnhVậy nên, Output sẽ là #Ex3: var a; console.log(a); 1
Theo định nghĩa trên, output sẽ là #Ex4: console.log(a); var a; 5Những hàm khai báo sau nếu trùng tên sẽ ghi đè lên hàm khai báo trước Ví dụ 9: Đã đăng vào thg 9 13, 2021 3:08 SA 3 phút đọc 3 phút đọc Mở đầuNhững người mới bắt đầu tìm hiểu về Javascript sẽ thắc mắc khi gặp một số trường hợp sử dụng biến rồi mới khai báo sau. Vì theo quy tắc chung của đa số các ngôn ngữ lập trình, để sử dụng một biến thì ta phải khai báo nó trước. Làm được như thế vì trong Javascript có cơ chế Hoisting, trong bài viết này chúng ta sẽ tìm hiểu cơ chế Hoisting trong Javascript. Để hiểu về Hoisting trước tiên phải bạn phải hiểu về Scope trong Javascript. Hoisting là gì ?Hoisting là cơ chế mặc định của JavaScript để di chuyển tất cả các biến và hàm khi khai báo lên đầu scope trước khi chúng được thực thi. Lưu ý đối với cơ chế này nó chỉ di chuyển khai báo, còn việc gán giá trị thì giữ nguyên. Hoisting variablesVòng đời của biến trong javascript bao gồm các giai đoạn sau:
Các bạn thử đoán xem kết quả của đoạn code sau đây là gì: 0Mình đoán sẽ có nhiều người nghĩ rằng kết quả là 7 vì ta đang truy cập vào một biến chưa được khai báo trước đó. Nhưng không, kết quả của đoạn code trên là 1. LOL vì sao lại thế ??? Cơ chế Hoisting của Javasript đã đưa khai báo biến lên trên cùng. Dưới đây mình sẽ mô tả những gì đã xảy ra. LOL vì sao lại thế ??? Cơ chế Hoisting của Javasript đã đưa khai báo biến lên trên cùng. Dưới đây mình sẽ mô tả những gì đã xảy ra. 1Nếu bạn sẽ thắc mắc khai báo được đưa lên trên cùng, trên cùng là ở đâu. Trên cùng là vị trí cao nhất trong scope hện tại (current scope). Ví dụ: 2Function trên tương tự như thế này: 3Hoisting functionsTrong Javascript có hai loại hàm là:
4Còn với function expressions thì bạn tạo một variable sau đó gán cho nó với một anonymous function như ví dụ sau đây: 5Trong Javascript thì Function declarations có thuộc tính Hoisting, còn Function expression thì không. Chúng ta cùng xem các ví dụ sau đây: 6 7Haizzz... tới đây bạn cảm thấy Hoisting như thế nào. Cá nhân mình thì thấy Hositing có thể dẫn để code của chúng ta cẩu thả và khó quản lý. Và phiên bản ES6 sinh ra nhằm cải tiến các vấn đề Javascript gặp phải. Tổng kếtTrên đây mình đã giải thích về Hoisting trong Javascript. Chỉ ra một phần sự khác nhau giữa Function expression và Function declaration.Function expression và Function declaration. Tham khảohttps://dmitripavlutin.com/variables-lifecycle-and-why-let-is-not-hoisted/ https://xdevclass.com/hieu-sau-ve-hoisting-scope-trong-javascript/ All rights reserved |