gpt4 book ai didi

javascript - IIFE 在防止名称冲突方面比 "named function declaration"有何优势?

转载 作者:行者123 更新时间:2023-12-03 06:25:06 25 4
gpt4 key购买 nike

我有read on stackoverflow IIFE 模式在实现模块而不仅仅是“命名函数声明”方面的好处在于,在大型项目中,它可以防止名称冲突。然而,在我看来,IIFE 并不比用于防止名称冲突的命名函数声明更好或更差。

考虑编写公开名为“GenericModuleName”的名称的库的两种方法:

IIFE 方法

var GenericModuleName = (function () {
return ObjectWhichHasPublicMethod;
})();

命名函数声明方法

function GenericModuleName() {
return {
PublicMethod : function () { privateMethod(); }
}
};

在这两种情况下,如果库的用户碰巧也有一个名为 GenericModuleName 的函数,那么仍然会出现名称冲突,不是吗?那么 IIFE 在防止名称冲突方面比“命名函数声明”更好吗?

最佳答案

你的两个例子实际上没有可比性。

创建一个包含具有公共(public)方法的对象的全局变量。另一个是全局函数,它将返回带有公共(public)方法的对象。

实际的等价物是:

var GenericModuleName = ObjectWhichHasPublicMethod;

…但好处并不是来自避免与 GenericModuleName 的名称冲突。它们来自于避免与所有其他变量发生名称冲突。

var GenericModuleName = function() {

var i = 0;

function privateMethod() {
return i++;
}

return {
PublicMethod : function PublicMethod() { privateMethod(); }
}
}();

iprivateMethod 都不是全局变量,因此它们不会与其他全局变量发生冲突。

关于javascript - IIFE 在防止名称冲突方面比 "named function declaration"有何优势?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38694136/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com