Hàm mũi tên trong JavaScript
Các hàm mũi tên đã được giới thiệu trong ES6.
Hàm mũi tên cho phép chúng ta viết cú pháp hàm ngắn hơn:
let myFunction = (a, b) => a * b;
Trước:
hello = function() {
return "Hello World!";
}
Với chức năng mũi tên:
hello = () => {
return "Hello World!";
}
Nó trở nên ngắn hơn! Nếu hàm chỉ có một câu lệnh và câu lệnh trả về một giá trị, bạn có thể xóa dấu ngoặc và từ
return
khóa:
Hàm mũi tên Trả lại giá trị theo mặc định:
hello = () => "Hello World!";
Lưu ý: Điều này chỉ hoạt động nếu hàm chỉ có một câu lệnh.
Nếu bạn có các tham số, bạn chuyển chúng vào bên trong dấu ngoặc đơn:
Hàm mũi tên với các tham số:
hello = (val) => "Hello " + val;
Trên thực tế, nếu bạn chỉ có một tham số, bạn cũng có thể bỏ qua dấu ngoặc đơn:
Về this
cái gì?
Việc xử lý các this
hàm mũi tên cũng khác so với các hàm thông thường.
Trong ngắn hạn, với các chức năng mũi tên không có ràng buộc của
this
.
Trong các hàm thông thường, this
từ khóa đại diện cho đối tượng được gọi là hàm, có thể là cửa sổ, tài liệu, nút hoặc bất cứ thứ gì.
Với các hàm mũi tên, this
từ khóa luôn đại diện cho đối tượng đã xác định hàm mũi tên.
Chúng ta hãy xem xét hai ví dụ để hiểu sự khác biệt.
Cả hai ví dụ đều gọi một phương thức hai lần, lần đầu tiên khi tải trang và một lần nữa khi người dùng nhấp vào một nút.
Ví dụ đầu tiên sử dụng một hàm thông thường và ví dụ thứ hai sử dụng một hàm mũi tên.
Kết quả cho thấy rằng ví dụ đầu tiên trả về hai đối tượng khác nhau (cửa sổ và nút), và ví dụ thứ hai trả về đối tượng cửa sổ hai lần, vì đối tượng cửa sổ là "chủ sở hữu" của hàm.
Thí dụ
Với một hàm thông thường this
đại diện cho đối tượng gọi hàm:
// Regular Function:
hello = function() {
document.getElementById("demo").innerHTML
+= this;
}
// The window object calls the function:
window.addEventListener("load", hello);
// A button object calls the
function:
document.getElementById("btn").addEventListener("click", hello);
Thí dụ
Với một hàm mũi tên this
thể hiện
chủ sở hữu của hàm:
// Arrow Function:
hello = () => {
document.getElementById("demo").innerHTML
+= this;
}
// The window object calls the function:
window.addEventListener("load", hello);
// A button object calls the
function:
document.getElementById("btn").addEventListener("click", hello);
Hãy nhớ những điểm khác biệt này khi bạn đang làm việc với các hàm. Đôi khi hành vi của các hàm thông thường là những gì bạn muốn, nếu không, hãy sử dụng các hàm mũi tên.
Hỗ trợ trình duyệt
Bảng sau xác định các phiên bản trình duyệt đầu tiên có hỗ trợ đầy đủ cho Hàm mũi tên trong JavaScript:
Chrome 45 | Edge 12 | Firefox 22 | Safari 10 | Opera 32 |
Sep, 2015 | Jul, 2015 | May, 2013 | Sep, 2016 | Sep, 2015 |