Arrow Function (ES2015/ES6) หรือ "Fat Arrow Function" เป็นไวยากรณ์เขียนฟังก์ชันแบบกระชับ ใช้ => (fat arrow) แทนคำสำคัญ function ช่วยลดโค้ดและจัดการ this ได้ดีกว่า
ไวยากรณ์
// อาร์กิวเมนต์เดียว ไม่ต้องวงเล็บ
param => expression
// หลายอาร์กิวเมนต์ หรือไม่มีอาร์กิวเมนต์
(param1, param2) => expression
() => expression
// หลายคำสั่ง ใช้ block body และต้องมี return
(param1, param2) => {
const sum = param1 + param2;
return sum;
}
เปรียบเทียบ
// Function Expression แบบเก่า
var rank = [7, 8, 9];
var display = rank.map(function(num) {
return num * num;
});
// Arrow Function
var rank = [7, 8, 9];
var display = rank.map(num => num * num);
// หรือ
var display = rank.map((num) => num * num);
ความแตกต่างสำคัญ: this Binding
// Function แบบเก่า - this ขึ้นกับวิธีการเรียก
var obj = {
value: 10,
regularFunc: function() {
setTimeout(function() {
console.log(this.value); // undefined (this = window/global)
}, 100);
},
arrowFunc: function() {
setTimeout(() => {
console.log(this.value); // 10 (this มาจาก lexical scope)
}, 100);
}
};
ข้อจำกัดของ Arrow Function
- ไม่มี
thisของตัวเอง (lexical this) - ไม่มี
argumentsobject - ไม่สามารถใช้เป็น Constructor ได้ (
new ArrowFunc()จะ error) - ไม่มี
prototypeproperty - ไม่สามารถใช้
yieldได้ (ไม่ใช่ generator)
เมื่อไหร่ควรใช้: Callback, map/filter/reduce, method สั้นๆ | ไม่ควรใช้: Method ของออบเจ็กต์ที่ต้องการ this, Constructor, Event handler ที่ต้อง this ชี้ไปที่ element