การปิดใน JavaScript

ตอนนี้เรามาศึกษาแนวคิดเรื่อง การปิด (closure) กัน ที่จริงแล้วคุณ คุ้นเคยกับแนวคิดนี้อยู่แล้ว สิ่งที่เหลือคือเพียง เรียนรู้คำศัพท์ที่ถูกต้อง

ดังนั้น การปิดคือฟังก์ชันที่รวมกับ ตัวแปรภายนอกทั้งหมดที่สามารถเข้าถึงได้ หรือในคำอื่น ๆ การปิดคือฟังก์ชัน ที่รวมกับสภาพแวดล้อมของศัพท์ (lexical environment) ของมัน

ใน JavaScript ส่วนใหญ่ เมื่อพูดว่า "การปิด ของฟังก์ชัน" มักไม่ได้หมายถึงตัวฟังก์ชันนั้นเอง แต่หมายถึงตัวแปรภายนอกของมัน หากฟังก์ชัน ใด ๆ ได้รับตัวแปรจากสภาพแวดล้อมของศัพท์ ของตัวเอง จะพูดว่า "ตัวแปรนั้นถูกดึงมา จากการปิด"

ลองนึกถึงโค้ดที่เราทำในบทเรียน ก่อนหน้านี้:

javascriptfunction test() {
  let num = 1;
  
  return function() {
    console.log(num);
  }
}

let func = test();
func(); // แสดงผล 1

ในกรณีนี้เราสามารถพูดได้ว่าฟังก์ชัน func ได้รับค่าของตัวแปร num มาจากการปิด นอกจากนี้ยังสามารถพูดได้ว่า ฟังก์ชัน func เก็บค่าของตัวแปร num ไว้ในการปิด