fbpx

Sự khác biệt giữa Arrow Function và Function thông thường

Sơ lược về bài viết

Ở bài viết trước, chúng ta đã xem qua Tìm hiểu về một số cú pháp ES6 trong JavaScript . Trong bài viết này, chúng ta sẽ tìm hiểu về sự khác biệt giữa Arrow Function và Function thông thường khi sử dụng trên thực tế. Tuy Arrow Function và Function phần giống nhau về cách định nghĩa 1 hàm nhưng tham chiếu đến bối cảnh (context) hay môi trường xung quanh nó sẽ khác. Vậy tham chiếu đến bối cảnh hay môi trường xung quanh là như thế nào? Chúng ta sẽ cùng bắt đầu tìm hiểu.

Các chủ đề mà chúng ta sẽ tìm hiểu như sau:

  1. Ví dụ cơ bản về bối cảnh (context)
  2. Ví dụ bối cảnh khi dùng trong setTimeout kết hợp với jQuery
  3. Một ví dụ khác khi kết hợp Arrow Function với Animation của jQuery
  4. Arrow Function thường được dùng trên Class (ES6)

Ví dụ cơ bản về bối cảnh (context)

Vậy bối cảnh ở đây là gì? Thật khó để định nghĩa cho các bạn chính xác được nghĩa của nó ở ngữ cảnh tiếng Việt. Vì thế các bạn chỉ cần hiểu đơn giản là từ khóa this được sử dụng trong Function thông thường và Arrow Function sẽ tham chiếu đến những môi trường hay bối cảnh khác nhau. Để tránh khó hiểu thêm, các bạn hãy xem qua ví dụ bên dưới:
Ở ví dụ này các bạn cũng đã thấy từ khóa this của chúng ta có giá trị khác biệt, this ở function thường sẽ tham chiếu đến chính Object chứa nó, còn Arrow Function sẽ tham chiếu đến cha gần nhất của nó nên vì thế nó hiểu từ khóa this của function cha bao hàm nó.
Và khi các bạn có dùng thêm use strict để ràng buộc chặt chẽ hơn về phạm vi hoạt động của biến thì this  trong Arrow Function có giá trị sẽ là undefined thay vì trả về cho các bạn đối tượng window. Nên các bạn hãy chú ý điều này.

Ví dụ bối cảnh khi dùng trong setTimeout kết hợp với jQuery

See the Pen Bối cảnh khi dùng trong setTimeout kết hợp với jQuery của Arrow Function by An Vu (@thienanblog) on CodePen.light

Như các bạn cũng thấy rằng ở Anonymous Function, chúng ta phải lưu tạm this của phương thức click vào biến btn để có thể truyền vào bên trong setTimeout. Trong đó, từ khóa this ở đối số của setTimeout được tham chiếu đến chính Anonymous Function của nó. Vì vậy, nó sẽ không hiểu this ở đây có ý nghĩa là btn chứ không phải là Anonymous Function đang được dùng.
Và khi các bạn dùng Arrow Function, chúng ta đã đơn giản hóa đi 1 bước khi dùng, giúp cho code của chúng ta dễ hiểu hơn là this này được tham chiếu đến chính Anonymous Function của phương thức click của jQuery chứ không phải chính nó nữa.

Một ví dụ khác khi kết hợp Arrow Function với Animation của jQuery

See the Pen Một ví dụ khác khi kết hợp Arrow Function với Animation của jQuery by An Vu (@thienanblog) on CodePen.light

Tương tự với ví dụ ở trên, trong ví dụ này tôi chủ yếu muốn cho các bạn thêm một số kinh nghiệm khi sử dụng trên thực tế như thế nào.

Arrow Function thường được dùng trên Class

Chuẩn ES6 cho phép chúng ta có thể viết class giống như những ngôn ngữ khác mà các bạn có thể đã từng biết qua, nếu chưa biết thì bây giờ các bạn biết, không sao cả. Tuy nhiên, class trong Javascript có những quy ước và cách khởi tạo thuộc tính khác biệt so với các ngôn ngữ từng được biết. Thông qua ví dụ này, phần nào các bạn cũng sẽ thích thú viết class hơn là viết function thông thường.

See the Pen Arrow Function trên Class by An Vu (@thienanblog) on CodePen.light

Khi chạy ví dụ này, các bạn cũng sẽ thấy rằng việc chúng ta sử dụng Function thông thường trên Class sẽ khiến từ khóa this của chúng ta có giá trị undefined ngay. Nên Arrow Function cũng thường rất được dùng trên Class thay vì Function thông thường. Chỉ là thường dùng thôi nhé, vì một số trường hợp chúng ta vẫn phải sử dụng Function thông thường để tham chiếu đến this của chính nó. Thường là các callback được gọi từ các sự kiện của thư viện bên ngoài mà chúng ta sử dụng.
Nếu bạn vẫn còn hứng thú thì hãy xem qua sự kiện onSet trong thư viện Pickadate để hiểu rõ hơn tôi nói cái gì. Nếu như chúng ta dùng Arrow Function trong trường hợp đó thì chắc chắn sẽ nhận sai giá trị ngay. Vì vậy, hãy đón xem ở 1 bài viết khác về thư viện Pickadate này mà tôi sẽ viết sắp tới các bạn nhé.
Qua bài viết này, chúng ta cũng đã tìm hiểu xong sự khác biệt giữa Arrow Function và Function thông thường như thế nào rồi. Cám ơn các bạn đọc giả đã ủng hộ Website.
(Visited 8,003 times, 1 visits today)

Leave a Reply

Your email address will not be published. Required fields are marked *