ECMAScript 闭包
- หน้าก่อนหน้า Object Function
- หน้าต่อไป ที่มีเนื้อหาเกี่ยวกับวิธีการที่เรียกว่า Object-Oriented
ECMAScript ที่เกิดความเข้าใจผิดง่ายที่สุดคือมันสนับสนุน closure。
บล็อคคลอส หมายถึงฟังก์ชันที่รวมทั้งตัวแปรที่ไม่ถูกคำนวณ หมายความว่า ฟังก์ชันสามารถใช้ตัวแปรที่ถูกกำหนดนอกฟังก์ชัน
ตัวอย่างบล็อคคลอสที่เรียบง่าย
การใช้ตัวแปรสากลใน ECMAScript คือตัวอย่างของบล็อคคลอสที่เรียบง่าย
var sMessage = "hello world"; function sayHelloWorld() { alert(sMessage); } sayHelloWorld();
ในบรรทัดนี้ หลังจากสคริปต์ได้รับการโหลดเข้าหลังเครื่องหน้ามา ไม่ได้คำนวณค่าของตัวแปร sMessage ของฟังก์ชัน sayHelloWorld() ฟังก์ชันนี้จับค่า sMessage เพื่อใช้ในอนาคต หมายความว่า โปรแกรมเจอร์ร์รู้ว่าต้องตรวจสอบค่า sMessage ในตอนที่เรียกฟังก์ชัน sayHelloWorld() ค่า sMessage จะถูกกำหนดในตอนที่เรียกฟังก์ชัน sayHelloWorld() (บรรทัดสุดท้าย) และแสดงข้อความ "hello world"
ตัวอย่างบล็อคคลอสที่ซับซ้อน
การเขียนฟังก์ชันภายในฟังก์ชันทำให้บล็อคคลอส (closure) มีความซับซ้อนมากขึ้น ตัวอย่างเช่น:
var iBaseNum = 10; function addNum(iNum1, iNum2) { function doAdd() { return iNum1 + iNum2 + iBaseNum; } return doAdd(); }
ที่นี่ ฟังก์ชัน addNum() รวมฟังก์ชัน doAdd() (บล็อคคลอส) ภายในฟังก์ชัน ซึ่งเป็นบล็อคคลอส เพราะมันจะรับค่าจากอุปกรณ์ของฟังก์ชันนอกและค่าของตัวแปรสากล iBaseNum ของฟังก์ชัน addNum() จะทำการเรียก doAdd() ด้วยสองอุปกรณ์และตัวแปรสากล และกลับค่าเป็นเมื่อเพิ่มค่าทั้งสองอุปกรณ์และตัวแปรสากล
ความสำคัญที่ต้องทราบคือ ฟังก์ชัน doAdd() ไม่รับอุปกรณ์ที่เป็นตัวแปร มันใช้ค่าจากสภาพแวดล้อมการปฏิบัติการ
จากการดูได้ชัดเจนว่า บล็อคคลอส (closure) คือส่วนที่แข็งแรงและมีความยอดเยี่ยมใน ECMAScript ที่สามารถใช้สำหรับการทำคำนวณที่ซับซ้อน
คำเตือน:เช่นเดียวกับการใช้ฟังก์ชันระดับสูง ในการใช้บล็อคคลอส (closure) ต้องระมัดระวัง เพราะมันอาจกลายเป็นสิ่งที่ซับซ้อนมาก
- หน้าก่อนหน้า Object Function
- หน้าต่อไป ที่มีเนื้อหาเกี่ยวกับวิธีการที่เรียกว่า Object-Oriented