ในกรณีเฉพาะที่คุณแสดงไม่มีความแตกต่างในแง่ของฟังก์ชันการทำงานหรือการมองเห็น
เป็นไปได้ว่า coder ดั้งเดิมใช้แนวทางนี้เป็นเทมเพลตประเภทหนึ่งที่ทำให้เขาสามารถกำหนดตัวแปรส่วนตัวที่สามารถใช้ในการกำหนดสิ่งต่างๆเช่นmyFunction
:
var MyObject = {};
(function(root) {
var seconds_per_day = 24 * 60 * 60;
root.myFunction = function(foo) {
return seconds_per_day;
};
})(MyObject);
สิ่งนี้หลีกเลี่ยงการคำนวณ seconds_per_day
ทุกครั้งที่มีการเรียกใช้ฟังก์ชันในขณะเดียวกันก็ป้องกันไม่ให้เกิดมลพิษในขอบเขตทั่วโลก
อย่างไรก็ตามไม่มีอะไรแตกต่างไปจากนั้นและแค่พูด
var MyObject = function() {
var seconds_per_day = 24 * 60 * 60;
return {
myFunction: function(foo) {
return seconds_per_day;
}
};
}();
โค้ดเดอร์ดั้งเดิมอาจต้องการให้สามารถเพิ่มฟังก์ชันให้กับอ็อบเจ็กต์โดยใช้ไวยากรณ์แบบประกาศroot.myFunction = function
แทนที่จะเป็นไวยากรณ์ของอ็อบเจ็กต์ / คุณสมบัติของmyFunction: function
ทรัพย์สินของ แต่ความแตกต่างนั้นเป็นเรื่องของความชอบเป็นหลัก
อย่างไรก็ตามโครงสร้างที่ใช้โดย coder ดั้งเดิมมีข้อได้เปรียบที่สามารถเพิ่มคุณสมบัติ / วิธีการอื่น ๆ ในโค้ดได้อย่างง่ายดาย:
var MyObject = {};
(function(root) {
var seconds_per_day = 24 * 60 * 60;
root.myFunction = function(foo) {
return seconds_per_day;
};
})(MyObject);
(function(root) {
var another_private_variable = Math.pi;
root.myFunction2 = function(bar) { };
})(MyObject);
บรรทัดล่างไม่จำเป็นต้องใช้แนวทางนี้หากคุณไม่จำเป็นต้องทำ แต่ก็ไม่จำเป็นต้องเปลี่ยนเพราะมันทำงานได้ดีอย่างสมบูรณ์และมีข้อดีอยู่บ้าง