簡體   English   中英

在防止名稱沖突方面,IIFE如何比“命名函數聲明”更好?

[英]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(); }
    }
}();

iprivateMethod都不是全局變量,因此它們不能與其他全局變量發生沖突。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM