Sự khác biệt giữa Arrow Function và Function trong Javascript

Cùng xem Sự khác biệt giữa Arrow Function và Function trong Javascript trên youtube.

Arrow Function (hay còn gọi là hàm mũi tên) là một trong những tính năng mới và rất hay của ES6. Nó thừa hưởng cách viết ngắn gọn bằng cú pháp ES6. Tuy Arrow Function và Function đều là function, nhưng cách viết và cách tham chiếu tới bối cảnh (context) khác nhau.

Arrow Function sử dụng kí tự =>

hello = () => { Dongnaiart(‘hello’) } // hello()

còn Function thông thường thì :

function hello(){ Dongnaiart(‘hello’) } // hello()

Với TH có tham số :

hello = name => { Dongnaiart(‘hello ‘, name) }

Ta có thể giản lược được dấu () với trường hợp có 1 tham số truyền vào.

Ngoài ra, với arrow function ta có thể bỏ qua từ khoá return

double = x => x * 2

còn với function thì :

function double(x){ return x * 2 }

Ngoài ra, ta còn sử dụng được arrow function trong trường hợp: map, filter, forEach,…

Ví dụ:

Xem Thêm : ứng dụng quản lý file cho android

const numbers = [1,2,3,4] const newArray = Dongnaiart(item => item * 2 ) // Dongnaiart(newArray)

Trông có vẻ tối giản code so với:

const numbers = [1,2,3,4] const newArray = Dongnaiart(function(item){ return item => item * 2 }) // Dongnaiart(newArray)

  • Để hiểu được phần bối cảnh (context) vừa được giới thiệu trên thì ta phải hiểu qua chút về ‘this’ trong javascript đã.
  • This là một từ khoá khá quen thuộc trong khá nhiều ngôn ngữ, nó dùng để trỏ tới chính object gọi hàm đó và javasrcipt cũng thế.

const person = { name_person:’hue’, getNamePerson: function(){ return Dongnaiart } } DongnaiartamePerson() // hue

Trong một trường hợp khác

const name_person = ‘hue’ // bien nay nam trong object window function getNamePerson(){ return Dongnaiart_person } DongnaiartamePerson() // hue -> trỏ tới object window getNamePerson() // hue -> trỏ tới object window

Tuy nhiên, nếu cứ thế thì đã dễ hiểu biết bao, nhưng sự khó chịu sẽ dần hiện ra nếu ta sử dụng nó….

Ví dụ 1: Khi nhấn button thì hiện tên

const person = { name_person:’hue’, getNamePerson: function() { Dongnaiart(this.name_person); } }; //Ở đây this sẽ là object person DongnaiartamePerson(); $(‘button’).click(person.getNamePerson); //getNamePerson truyền vào như callback

Lúc này, ta sẽ giật mình vì hàm chạy không được như mong muốn.Kiểm tra kĩ, thì lúc này, this không phải là trỏ tới person mà là button mà ta click vào, vì vậy nó k có name_person.

Để giải quyết vấn đề này, chúng ta cần dùng tới bind

$(‘button’).click(person.getNamePerson.bind(person));

Ta sẽ gặp nhiều vấn đề này hơn trong trường hợp, hàm truyền vào như một callback như setInterval chẳng hạn.

Ví dụ 2:

Xem Thêm : Cách tạo vở ô ly có chữ viết tay Tiểu học trong Word – Download.vn

const person = { name:’hue’, getName: function(){ return Dongnaiart } } Dongnaiartame() // ‘hue’ const getNamePerson = Dongnaiartame() getNamePerson() // sai -> not function -> this trỏ tới object window

Cách giải quyết nó :

const getNamePerson = Dongnaiart(person) // hue

Lúc này, sau khi dùng bind thì con trỏ this sẽ trỏ tới person.

Để tránh tình trạng lỗi như trên, trong một vài trường hợp “mập mờ context” như trên, giải pháp sử lí đó là ‘bind’.

Khác với function thông thường, arrow function không có bind vì vậy, không định nghĩa lại this. Do đó, this sẽ tương ứng với ngữ cảnh gần nhất của nó.

Và cũng chính bởi nó không định nghĩa this, nên arrow function không phù hợp làm method của object, vì vậy nếu định nghĩa method của object, function vẫn là sự lựa chọn đúng đắn.

Trong bài chia sẻ phần trước, thì ta cũng không nên dùng arrow function bừa bãi ở mọi nơi, mà cũng nên bind trước rồi gọi function sẽ tránh được việc khi render lại tạo function mới.

Trên đây là những điểm mình đúc kết lại trong thời gian tiếp xúc với javascript về function và arrow function. Mình xin tóm tắt lại như sau:

Về định nghĩa, arrow function và function đều là function tuy nhiên:

Arrow Function:

  • Arrow function là một tính năng mới của ES6, giúp viết code ngắn gọn hơn.
  • Arrow function sử dụng khá ok trong các TH dùng: map, filter, reducer,…
  • Arrow function không có bind.
  • Arrow function không phù hợp là method của object.

Function:

  • Cần chú ý thêm về con trỏ được trỏ tới để định nghĩa lại this bằng ‘bind’.

Tùy vào từng mục đích sử dụng, mà nên lựa chọn function hay arrow function, chứ trước mắt arrow funtion không thể thay thế function được .

Cám ơn các bạn đã đọc!

Nguồn: https://dongnaiart.edu.vn
Danh mục: Tin tức

Lời kết: Trên đây là bài viết Sự khác biệt giữa Arrow Function và Function trong Javascript. Hy vọng với bài viết này bạn có thể giúp ích cho bạn trong cuộc sống, hãy cùng đọc và theo dõi những bài viết hay của chúng tôi hàng ngày trên website: Dongnaiart.edu.vn

Related Posts

Xổ Số W88: Mô Hình Cược Mới Mẻ và Lợi Nhuận Khủng

Xổ Số W88: Mô Hình Cược Mới Mẻ và Lợi Nhuận Khủng

Xổ số W88 đã khiến cả cộng đồng game thủ và những người đam mê cá cược chao đảo với mô hình cược cực kỳ đa dạng và…

Xổ số Thừa Thiên Huế: Lựa chọn hàng đầu của lô thủ!

Xổ số Thừa Thiên Huế: Lựa chọn hàng đầu của lô thủ!

Có thể bạn quan tâm Quy tắc tạo sinh CVT – Chữ viết tắt (chuviettat.com) [TOP] 155 ảnh đại diện buồn màu đen cho người mang tâm…

Điều khác biệt của chương trình đào tạo quốc tế cấp trung học sở 

Điều khác biệt của chương trình đào tạo quốc tế cấp trung học sở 

Chương trình đào tạo quốc tế chắc hẳn không còn là điều gì đó quá xa lạ với mọi người. Song vẫn còn rất nhiều bậc phụ…

Kèo châu Á là gì? Kinh nghiệm cá cược kèo châu Á bất bại 2024

Kèo châu Á là gì? Kinh nghiệm cá cược kèo châu Á bất bại 2024

Kèo châu Á là gì? Kèo châu Á là một loại kèo cá cược phổ biến trong bóng đá và nhiều môn thể thao khác tại thabet. Đây…

Lý do bạn nên tải app Sin88 về điện thoại tham gia cá cược

Lý do bạn nên tải app Sin88 về điện thoại tham gia cá cược

Bạn muốn tìm kiếm một sân chơi cá cược uy tín, chất lượng và mang đến những trải nghiệm tuyệt vời? Sin88 – ứng dụng cá cược…

Bắn cá đổi thưởng là gì? Kinh nghiệm chơi bắn cá đổi thưởng luôn thắng

Bắn cá đổi thưởng là gì? Kinh nghiệm chơi bắn cá đổi thưởng luôn thắng

Bắn cá đổi thưởng là gì? Bắn cá U888 đổi thưởng là một loại hình giải trí trực tuyến phổ biến trong ngành game online. Dưới đây là…