ฉันอ่านบทความเกี่ยวกับการปิดและเห็นสิ่งนี้ทุกที่ แต่ไม่มีคำอธิบายที่ชัดเจนว่ามันทำงานอย่างไร - ทุกครั้งที่ฉันเพิ่งบอกให้ใช้ ... :
// Create a new anonymous function, to use as a wrapper
(function(){
// The variable that would, normally, be global
var msg = "Thanks for visiting!";
// Binding a new function to a global object
window.onunload = function(){
// Which uses the 'hidden' variable
alert( msg );
};
// Close off the anonymous function and execute it
})();
ตกลงฉันเห็นว่าเราจะสร้างฟังก์ชั่นใหม่ที่ไม่ระบุชื่อแล้วดำเนินการ ดังนั้นหลังจากนั้นรหัสง่ายๆนี้ควรใช้งานได้ (และเป็นเช่นนั้น):
(function (msg){alert(msg)})('SO');
คำถามของฉันคือเวทมนตร์ชนิดใดที่เกิดขึ้นที่นี่ ฉันคิดว่าเมื่อฉันเขียน:
(function (msg){alert(msg)})
ดังนั้นฟังก์ชั่นที่ไม่มีชื่อใหม่จะถูกสร้างขึ้นเช่นฟังก์ชั่น "" (msg) ...
แต่ทำไมมันใช้ไม่ได้
(function (msg){alert(msg)});
('SO');
เหตุใดจึงต้องอยู่ในบรรทัดเดียวกัน
คุณช่วยชี้ตำแหน่งของฉันให้ฉันหน่อยได้ไหม?
(function (msg){alert(msg)})('SO');
ทำงานได้อย่างสมบูรณ์ด้วยตัวเอง มันไม่มีส่วนเกี่ยวข้องกับฟังก์ชั่นนิรนามอื่น ๆ ที่คุณโพสต์ไว้ก่อนหน้านี้ นี่เป็นฟังก์ชั่นนิรนามสองตัวที่แยกกันโดยสิ้นเชิง คุณต้องเรียกใช้ฟังก์ชันที่ไม่ระบุชื่อทันทีเพราะไม่มีชื่อและไม่สามารถอ้างอิงได้ในภายหลัง