gpt4 book ai didi

javascript - 分配给导出与模块有什么区别?

转载 作者:行者123 更新时间:2023-11-29 21:17:33 25 4
gpt4 key购买 nike

考虑以下代码,基于 http://www.adequatelygood.com/JavaScript-Module-Pattern-In-Depth.html 中描述的“松散扩充”模块模式

var FOO = (function(exports) {

//What is the difference between this:
exports.hello = "hello";
return exports;

}(FOO || {}));

var FOO = (function(exports) {

//And this:
FOO.world = "world";
return exports;

}(FOO || {}));

//When the result works either way:
alert(FOO.hello + " " + FOO.world);

在这个例子中,为什么要分配给 exportsFOO 两种方式都一样?有什么区别?

最佳答案

这两个版本并不等同。当您尝试分配 FOO.world 时,第二个会出错,因为此时 FOO 仍未定义。现在您的代码之所以能正常工作,是因为第一个模块定义正在创建 FOO 对象。

至于为什么要有 exports 变量,主要原因是它将模块定义与模块名称分离。您只需要写一次模块名称 (FOO),如果您在服务器端环境中,您甚至可能不需要使用模块名称(它隐含在文件名中)。

注意在你玩游戏的链接中,即使是简单的“模块导出”版本也已经为模块使用了“我的”变量,而不是直接分配给模块:

var MODULE = (function () {
var my = {},
privateVariable = 1;

function privateMethod() {
// ...
}

my.moduleProperty = 1;
my.moduleMethod = function () {
// ...
};

return my;
}());

关于javascript - 分配给导出与模块有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38906883/

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