赋值给exports和module之间的区别是什么?
What is the difference between assigning to exports vs. module?
考虑以下基于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);
在这个例子中,当exports
和FOO
的工作方式相同时,为什么要分配给它们呢?有什么区别呢?
两个版本不相等。第二个给出了一个错误,当你试图分配FOO.world
,因为在那一点FOO仍然未定义。现在你的代码只工作,因为第一个模块定义正在创建FOO对象。
至于为什么要使用exports
变量,主要原因是它将模块定义与模块名称解耦。您只需要编写一次模块名(FOO),如果您在服务器端环境中,您甚至可能不需要使用模块名(它从文件名中隐含)。
请注意,在你的游戏链接中,即使是简单的"模块导出"版本也已经为模块使用了"my"变量,而不是直接分配给Module:
var MODULE = (function () {
var my = {},
privateVariable = 1;
function privateMethod() {
// ...
}
my.moduleProperty = 1;
my.moduleMethod = function () {
// ...
};
return my;
}());
相关文章:
- 这是什么 ==- javascript 运算符
- 我的单元测试选项是什么
- 打破承诺链的好方法是什么
- 在AngularJS应用程序中使用封装指令和路由的推荐方式是什么
- Javascript中的空白是什么
- 是什么让一个“;Uncaught RangeError:超过了最大调用堆栈大小“;错误(Chrome,在其他浏览器中显示
- 在JavaScript中拆分日期字符串的更好方法是什么
- 将jQuery.ech()方法转换为本地JavaScript抽象的最佳方法是什么
- 处理浮点错误的最佳方法是什么
- javascript导入的最佳实践是什么
- 基于窗口宽度jquery的函数的替代方法是什么
- 在ng重复循环中显示条件内容的最佳方式是什么
- 我的客户端选项是什么
- 这是什么“;要求“;事情
- 未捕获的类型错误:topFrame.window.changeSelectedBarStyle不是函数,原因是什么
- 实现比较方法的最佳实践是什么;s的比较类型是在运行时选择的
- @@(“at at”)在ES6 JavaScript中是什么意思
- knex:根据结果创建数组的合适方法是什么
- emu -model、emu -restless和emu之间的主要区别(优缺点)是什么?
- function()在jQuery中是什么意思?这个和$(这个)有什么区别