ฉันกำลังศึกษาTHREE.jsและสังเกตเห็นรูปแบบที่มีการกำหนดฟังก์ชันดังนี้:
var foo = ( function () {
var bar = new Bar();
return function ( ) {
//actual logic using bar from above.
//return result;
};
}());
(ตัวอย่างดูวิธีการ raycast ที่นี่ )
ปกติรูปแบบของวิธีการดังกล่าวจะมีลักษณะเช่นนี้
var foo = function () {
var bar = new Bar();
//actual logic.
//return result;
};
การเปรียบเทียบเวอร์ชันแรกกับรูปแบบปกติเวอร์ชันแรกดูเหมือนจะแตกต่างกันในสิ่งนั้น:
- จะกำหนดผลลัพธ์ของฟังก์ชันที่ดำเนินการเอง
- กำหนดตัวแปรท้องถิ่นภายในฟังก์ชันนี้
- ส่งคืนฟังก์ชันจริงที่มีตรรกะที่ใช้ตัวแปรโลคัล
ดังนั้นความแตกต่างที่สำคัญก็คือในรูปแบบแรกแถบจะถูกกำหนดเพียงครั้งเดียวเมื่อเริ่มต้นในขณะที่รูปแบบที่สองจะสร้างตัวแปรชั่วคราวนี้ทุกครั้งที่มีการเรียก
ฉันเดาได้ดีที่สุดว่าเหตุใดจึงใช้สิ่งนี้คือ จำกัด จำนวนอินสแตนซ์สำหรับ bar (จะมีเพียงอันเดียว) จึงช่วยประหยัดค่าใช้จ่ายในการจัดการหน่วยความจำ
คำถามของฉัน:
- สมมติฐานนี้ถูกต้องหรือไม่?
- มีชื่อลายนี้ไหม
- ทำไมถึงใช้?