Arrow Function (Fat Arrow Function) เป็นไวยากรณ์ ES6 สำหรับเขียนฟังก์ชันแบบกระชับ ใช้ => ลดการเขียนคำสำคัญ function ซ้ำๆ
ไวยากรณ์
// อาร์กิวเมนต์เดียว
param => expression
// หลายอาร์กิวเมนต์ หรือ ไม่มีอาร์กิวเมนต์
(param1, param2) => expression
() => expression
// Block body (หลายคำสั่ง ต้องมี return)
(param1, param2) => {
const result = param1 + param2;
return result;
}
เปรียบเทียบ
// Function แบบเก่า
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
var obj = {
value: 10,
regular: function() {
setTimeout(function() {
console.log(this.value); // undefined (this = window)
}, 100);
},
arrow: function() {
setTimeout(() => {
console.log(this.value); // 10 (lexical this จาก obj)
}, 100);
}
};
ข้อจำกัด
- ไม่มี
thisของตัวเอง (Lexical this) - ไม่มี
argumentsobject - ไม่สามารถใช้
newได้ (ไม่ใช่ Constructor) - ไม่มี
prototype - ไม่ใช้
yieldได้
เมื่อไหร่ควร/ไม่ควรใช้
| ✅ ควรใช้ | ❌ ไม่ควรใช้ |
|---|---|
| Callback ใน map, filter, reduce | Method ของออบเจ็กต์ที่ต้องการ this |
| ฟังก์ชันสั้นๆ หนึ่งบรรทัด | Constructor (new) |
| Event handler ที่ไม่ต้องการ this | Event handler ที่ต้องการ this = element |
| IIFE แบบสั้น | Generator function |