Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> JavaScript

เมื่อไหร่ควรใช้ Anonymous JavaScript Functions

Anonymous Functions (ฟังก์ชันไร้ชื่อ) เหมาะสำหรับ:

  • Inline Handlers/Callbacks: โค้ดอ่านง่ายเมื่อ Handler อยู่ในที่เรียกใช้
  • IIFE: สร้าง Scope แยกกัน
  • Arguments ให้ Higher-Order Functions: map, filter, reduce, forEach, setTimeout
  • Closure: จับตัวแปรจาก Scope รอบนอก

รูปแบบ

// Anonymous Function Expression
var func = function() {
  alert('This is anonymous');
};
func();

// Arrow Function (ES6) - กระชับกว่า
const func = () => alert('This is anonymous');

// ใช้เป็น Callback โดยตรง
setTimeout(function() { console.log('Later'); }, 1000);
setTimeout(() => console.log('Later'), 1000);

array.forEach(function(item) { ... });
array.forEach(item => ...);

ข้อดี

  • เข้าถึงตัวแปรใน Parent Scope ได้ (Closure)
  • โค้ดกระชับ อยู่ที่จุดใช้งาน
  • ไม่ปนเปื้อน Global Namespace

ข้อเสีย

  • Stack Trace ไม่มีชื่อฟังก์ชัน (ยากต่อ Debug) → ใช้ Named Function Expression
  • Recursion ยาก (ไม่มีชื่อเรียกตัวเอง) → ใช้ Named Function Expression หรือ arguments.callee (Deprecated)
  • โค้ดยาวในบรรทัดเดียวอ่านยาก → Extract เป็น Named Function

Named Function Expression (Best of Both)

var factorial = function fact(n) {
  return n <= 1 ? 1 : n * fact(n - 1); // เรียกตัวเองได้ด้วยชื่อ fact
};

// Stack Trace จะแสดง "fact" แทน "anonymous"

สรุป: เมื่อไหร่ควรใช้

สถานการณ์แนะนำ
Callback สั้น (1-2 บรรทัด)Arrow Function
Callback ต้อง RecursiveNamed Function Expression
IIFE / Module PatternAnonymous/Arrow IIFE
Event Handler ใช้ครั้งเดียวArrow Function
Logic ซับซ้อน/ReusableNamed Function (Declaration/Expression)