3

我正在查看store.js的源代码,特别是它如何将自身添加到全局范围:

if (typeof module != 'undefined') { module.exports = store }
else if (typeof define === 'function' && define.amd) { define(store) }
else { this.store = store }

我理解最后一个陈述this.store = store,但其他的呢?moduledefine功能是什么?还不能this.store = store在所有浏览器上工作?

更一般地说,将模块添加到全局范围的正确跨浏览器方式是什么?

4

1 回答 1

4

第一种情况是CommonJS,它在 Node.js 中使用最为显着,是 AMD(异步模块定义)的一种。模块是使用定义的全局模块对象执行的 JavaScript 文件。无论该文件设置什么,module.exports应用程序的其他部分都可以使用,并且文件中的所有其他内容都将仅对该模块保持私有。这是一篇很好的博客文章

第二个是 AMD 的另一种风格,最常使用requirejs实现。这与 CommonJs 的想法非常相似,但在浏览器中更常见。Dojo 框架是基于 amd 的框架的一个很好的例子。Jquery 社区也落后于 amd 很多。define告诉 amd 系统你正在给它一个模块,应用程序的其余部分可以通过使用require.

最终版本是在普通简浏览器中运行的常见场景。this很可能是 DOMWindow,因此 store 对象在整个网页中变得全局。

于 2012-01-12T03:09:40.883 回答