Hướng dẫn function expression in javascript - biểu thức hàm trong javascript
Show Đã đăng vào thg 5 9, 2020 4:35 CH 3 phút đọc 3 phút đọc
Câu hỏi đặt ra là: chúng khác nhau chỗ nào?
Ở ví dụ trên chúng ta thấy hàm test() được gọi trước khi nó được khai báo. Tuy nhiên, chúng ta cũng có thể viết dạng như sau cũng được:
Còn function expression thì sao? Nó không được JavaScript đánh giá cho đến khi nó được gán vào biến. Hơi trừu tượng một tí, chúng ta làm cái ví dụ cho dễ hiểu
Nếu các bạn chạy đoạn mã trên thì sẽ báo lỗi vì expression được gọi trước khi nó được khai báo. Để chạy được, chúng ta phải viết lại như sau:
=> function declaration thì có thể gọi trước khi khai báo hoặc sau khi khai báo đều được, còn function expression thì phải có trình tự. Function Declaration
Function Expression
Hoisting
Đối với Function Expression thì sẽ báo lỗi 0Hoàn cảnh sử dụng
Tổng kết
All rights reserved Trong bài viết trước, mình đã tìm hiểu về hàm trong JavaScript. Cách khai báo hàm đó gọi là "function declaration". Bài viết này mình sẽ tìm hiểu về một khái niệm khác gọi là "function expression" hay dịch ra là "biểu thức hàm". Function expression hiểu đơn giản là hàm được định nghĩa trong một biểu thức, ví dụ: 1Có thể hiểu là mình khởi tạo một hàm, rồi gán hàm đó cho biến 4 giống như bất kỳ loại giá trị nào khác (number, string, boolean,...). Bạn có thể in ra giá trị biến 4: 2Kết quả hiển thị ra là một string biểu diễn hàm. Chú ý: trong câu lệnh 6 trên mình viết là 4 mà không có cặp dấu ngoặc đơn 8. Vì nếu có cặp dấu 8 thì đó nghĩa là gọi hàm. 3Kết quả là function expression với 4 được gọi, nên dòng chữ Hello from completejavascript.com được in ra.Hello from completejavascript.com được in ra.Sau đó là dòng 1 - vì biểu thức hàm 4 không có 3 giá trị nào cả.Đặc điểm của function expressionVì biểu thức hàm cũng là một giá trị, nên bạn hoàn toàn có thể gán nó cho một biến khác, ví dụ: 4Khi đó, bạn gọi 4 cũng giống như gọi 5.
Ví dụ: 5Hàm callbackVì bản chất hàm là một giá trị, nên bạn có thể truyền hàm vào một hàm khác. Ví dụ mình cần viết một hàm 6 với ba tham số:
Code triển khai hàm 2 như sau: 6Trong ví dụ trên, hàm confirm bật ra một hộp thoại hỏi người dùng "Bạn muốn tiếp tục thực hiện chương trình không?". Nếu người dùng chọn OK thì giá trị của 3 là 4. Khi đó, hàm 8 được gọi. Ngược lại, khi 3 là 7 thì hàm 0 được gọi.OK thì giá trị của 3 là 4. Khi đó, hàm 8 được gọi. Ngược lại, khi 3 là 7 thì hàm 0 được gọi.Ở đây, hai tham số 8 và 0 gọi là hàm callback hay gọi tắt là callback.hàm callback hay gọi tắt là callback.
Trong ví dụ trên, mình viết định nghĩa hai hàm 8 và 0 sử dụng "function declaration". Nhưng bạn có thể thay thế bằng biểu thức hàm như sau: 7 Vì thực tế là hai hàm 8 và 0 chỉ sử dụng bên trong hàm 2, nên mình có thể dùng function expression như trên mà không cần khai báo tên hàm.
So sánh function expression với function declarationĐọc đến đấy chắc bạn cũng đã khá hiểu về biểu thức hàm rồi phải không? Sau đây, mình cùng xem những điểm khác nhau giữa biểu thức hàm (function expression) và định nghĩa hàm (function declaration). ► Cú pháp khai báo: Function declaration: là hàm được định nghĩa độc lập, không nằm trong biểu thức hay câu lệnh nào cả.: là hàm được định nghĩa độc lập, không nằm trong biểu thức hay câu lệnh nào cả. 8Function expression: là hàm được định nghĩa với một biểu thức, sử dụng toán tử gán 6. 9► Thời gian khởi tạo: Function declaration: hàm được xử lý sớm hơn vị trí mà hàm được định nghĩa. Nghĩa là bạn có thể gọi hàm trước khi định nghĩa hàm.: hàm được xử lý sớm hơn vị trí mà hàm được định nghĩa. Nghĩa là bạn có thể gọi hàm trước khi định nghĩa hàm. 0Function expression: hàm được tạo ra tại thời điểm chương trình thực thi xử lý tới đó. Nghĩa là bạn không thể gọi biểu thức hàm trước khi định nghĩa nó.: hàm được tạo ra tại thời điểm chương trình thực thi xử lý tới đó. Nghĩa là bạn không thể gọi biểu thức hàm trước khi định nghĩa nó. Ví dụ sau bị lỗi cú pháp: 1► Phạm vi của function declaration và function expression: Khi sử dụng strict mode, function declaration có phạm vi trong block. Bạn có thể gọi hàm ở bất kỳ đâu trong block đó, nhưng không sử dụng được ở bên ngoài.block. Bạn có thể gọi hàm ở bất kỳ đâu trong block đó, nhưng không sử dụng được ở bên ngoài. Ví dụ sau bị lỗi cú pháp: 2► Phạm vi của function declaration và function expression: Khi sử dụng strict mode, function declaration có phạm vi trong block. Bạn có thể gọi hàm ở bất kỳ đâu trong block đó, nhưng không sử dụng được ở bên ngoài. 3
Nên viết hàm theo function declaration hay function expression? Câu trả lời là: tùy bạn.tùy bạn. Tùy thuộc vào phong cách và mục đích của bạn mà lựa chọn cho phù hợp. Tuy nhiên, theo quan điểm cá nhân thì mình thấy dùng function declaration sẽ dễ nhìn hơn. Ngoài ra, function declaration còn giúp bạn thoải mái hơn trong việc cấu trúc code (không phụ thuộc nhiều vào thứ tự code).function declaration sẽ dễ nhìn hơn. Ngoài ra, function declaration còn giúp bạn thoải mái hơn trong việc cấu trúc code (không phụ thuộc nhiều vào thứ tự code). Tổng kếtBản chất của hàm là giá trị. Vì vậy, bạn có thể thoải mái gán, sao chép và truyền một hàm vào hàm khác dạng tham số.giá trị. Vì vậy, bạn có thể thoải mái gán, sao chép và truyền một hàm vào hàm khác dạng tham số. Khi một hàm được định nghĩa độc lập thì đó gọi là "function declaration". Ngược lại, khi một hàm được định nghĩa bên trong một biểu thức, đó gọi là "function expression". Khi một hàm được truyền vào bên trong hàm khác để gọi lại khi cần thiết, hàm đó được gọi là "hàm callback". Function declaration được xử lý trước khi chương trình chạy đến đó. Function declaration có phạm vi trong block, nên bạn có thể gọi hàm ở bất kỳ đâu trong block. được xử lý trước khi chương trình chạy đến đó. Function declaration có phạm vi trong block, nên bạn có thể gọi hàm ở bất kỳ đâu trong block. Function expression được tạo ra tại thời điểm chương trình chạy đến vị trí khởi tạo hàm. Nên bạn chỉ gọi được hàm sau khi đã khởi tạo. được tạo ra tại thời điểm chương trình chạy đến vị trí khởi tạo hàm. Nên bạn chỉ gọi được hàm sau khi đã khởi tạo. ★ Nếu bạn thấy bài viết này hay thì hãy theo dõi mình trên Facebook để nhận được thông báo khi có bài viết mới nhất nhé: |