Điểm khác nhau giữa Regular Function vs Arrow Function

Tram Ho

Mình là TUẤN hiện đang là một Full-stack Developer tại Tokyo.
Nếu bạn thấy Blog này hay xin hãy cho mình một like và đăng ký để ủng hộ mình nhé.

Bạn có thể khai báo các Functions của bạn theo nhiều cách.

Sử dụng keyword function:

Bạn có thể gọi cả khai báobiểu thức hàm là Normal/Regular Function

Arrow function được giới thiệu trong ES6 và còn được gọi là arrow function.

Như bạn thấy cả hai function hoạt động giống nhau trong ví dụ trên. Bây giờ câu hỏi đặt ra là tại sao chúng ta cần regular funcion hoặc arrow function.

Cùng thảo luận một số vấn đề bên dưới nhé

1. Syntax – Cú pháp

2. Arguments binding – Ràng buộc đối số

3. this

4. eyword: new

5. Không có parameters được đặt tên trùng lặp

6. Function Hoisting

7. Method

————————————–

1️. Syntax – Cú pháp

Chúng ta có thể viết hàm regulararrow function theo cách này

Implicit Return – Return ngầm định

Trong hàm thông thường, bạn phải sử dụng keyword return để trả về bất kỳ value nào. Nếu bạn không trả về bất kỳ thứ gì thì hàm sẽ trả về undefined.

Các arrow function hoạt động theo cách tương tự khi trả về giá trị.

Nếu arrow function chứa một biểu thức, bạn có thể bỏ qua dấu ngoặc nhọn và khi đó biểu thức sẽ được trả về implicitly returned.

{}không bắt buộc nếu nó chỉ có một dòng tuyên bố

()không bắt buộc nếu bạn chỉ có một đối số

let add = (x) => x + x;

Nếu không có đối số

let arrowFunc = _ => console.log("Arrow Function");

2️. Arguments binding – Đối số ràng buộc

Trong hàm thông thường, các keyword arguments có thể được sử dụng để truy cập các đối số được truyền cho hàm.

Thí dụ:

Các arrow function không có ràng buộc đối số.

Tuy nhiên, nếu bạn muốn truy cập các đối số trong một arrow function, bạn có thể sử dụng toán tử rest:

3. this

Trong hàm thông thường, this thay đổi theo cách hàm đó được gọi.

  • Simple Invocation: this bằng đối tượng toàn cục hoặc có thể không xác định nếu bạn đang sử dụng chế độ strict mode.
  • Method Invocation: this bằng đối tượng sở hữu hàm.
  • Indirect Invocation: this bằng đối số đầu tiên.
  • Constructor Invocation: this bằng instance mới được tạo.

Các arrow function không có this riêng và chúng không xác định lại value của this bên trong hàm.

this bên trong một arrow function luôn đề cập đến this từ contexts bên ngoài.

4. new

Các hàm thông thường có thể sử dụng constructor, chúng có thể được gọi bằng cách sử dụng keyword new.

Tuy nhiên, các arrow function không bao giờ có thể được sử dụng như các hàm khởi tạo. Do đó, chúng không bao giờ có thể được gọi với keyword new

5. paramaters không được đặt tên trùng lặp

Trong function bình thường, chúng ta có thể làm điều này:

Các arrow function không bao giờ được có các tham số được đặt tên trùng lặp, cho dù ở chế độ strict mode hay non-strict mode.

6. Function Hoisting

Trong function thông thường, function được hoisting lên ở đầu.

Trong arrow function, hàm được hoisting vào nơi bạn khai báo nó. Vì vậy, nếu bạn gọi hàm trước khi khai báo, bạn sẽ nhận được referenceError.

7. Methods

Bạn có thể xác định các hàm trong lớp bằng cách sử dụng hàm thông thường.

Bạn cũng cần áp dụng callback.

Nhưng nếu bạn ràng buộc this

Bằng ví dụ trên, bạn có thể thấy rằng bạn phải liên kết contexts this với context của chúng.

Trong arrow function, bạn không cần phải ràng buộc với context.

Khi nào không sử dụng arrow function

Object

Khi bạn gọi dog.jumps, số đếm không tăng lên. Đó là bởi vì this không bị ràng buộc với bất cứ điều gì, và sẽ kế thừa value của this từ phạm vi cha của nó.

Tham khảo

Tóm tắt

Trong hàm thông thường, this value là động, Trong arrow function, this value bằng với value của hàm ngoài.

Trong hàm thông thường, các đối số sẽ cung cấp cho bạn danh sách tham số arguments được truyền vào hàm. argument của arrow function không được xác định.

Trong hàm thông thường, bạn luôn phải trả về bất kỳ value nào, nhưng trong arrow function, bạn có thể bỏ qua keyword return và có thể viết single line.

Trong mũi tên, các tham số của hàm phải là duy nhất.

Vấn đề Hoisting trong arrow function vì hàm không được gọi trước khi khởi tạo.

Như mọi khi, mình hy vọng bạn thích bài viết này và biết thêm được điều gì đó mới.

Cảm ơn và hẹn gặp lại các bạn trong những bài viết tiếp theo!

Nếu bạn thấy thích blog của mình thì nhấn theo dõi để ủng hộ mình nhé. Thank you.

Ref

Chia sẻ bài viết ngay

Nguồn bài viết : Viblo