[英]How is IIFE better than “named function declaration” in preventing name collision?
我在stackoverflow上讀到 ,IIFE模式在實現模塊而不是僅在“命名函數聲明”中的好處是,在大型項目中,它可以防止名稱沖突。 但是,在我看來,IIFE並不比用於防止名稱沖突的命名函數聲明更好或更糟。
考慮兩種編寫庫的方法,該庫公開了一個名為“ GenericModuleName”的名稱:
IIFE方法
var GenericModuleName = (function () {
return ObjectWhichHasPublicMethod;
})();
命名函數聲明方法
function GenericModuleName() {
return {
PublicMethod : function () { privateMethod(); }
}
};
在這兩種情況下,如果庫的用戶碰巧也有一個名為GenericModuleName的函數,那么仍然會有名稱沖突,不是嗎? 那么在防止名稱沖突方面,IIFE如何比“命名函數聲明”更好?
您的兩個示例並非真正可比。
一個創建帶有全局對象的全局對象。 另一個具有一個全局函數,該函數將使用公共方法返回一個對象。
實際等效為:
var GenericModuleName = ObjectWhichHasPublicMethod;
…但是好處不是避免與GenericModuleName
發生名稱沖突。 它們來自避免與其他所有變量發生名稱沖突。
var GenericModuleName = function() {
var i = 0;
function privateMethod() {
return i++;
}
return {
PublicMethod : function PublicMethod() { privateMethod(); }
}
}();
i
和privateMethod
都不是全局變量,因此它們不能與其他全局變量發生沖突。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.