javascript - 将 JavaScript 模块添加到全局范围的跨平台方式是什么?

标签 javascript module-pattern global-scope self-invoking-function

我正在查看 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 不是已经可以在所有浏览器上运行了吗?

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

最佳答案

第一个案例是 CommonJS ,它最常用于 Node.js 并且是 AMD 的一种风格(Asynchronous Module Definition)。模块是一个 JavaScript 文件,它通过定义的全局模块对象执行。该文件设置为 module.exports 的任何内容都将可供应用程序的其他部分使用,并且文件中的所有其他内容将仅对该模块保持私有(private)。这是一个good blog post在上面。

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

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

关于javascript - 将 JavaScript 模块添加到全局范围的跨平台方式是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8829581/

相关文章:

javascript - 当您在 JavaScript 中声明两个具有相同名称和作用域的变量时会发生什么?

javascript - 何时在 JavaScript 中嵌套函数?

c# - 如何在整个解决方案中声明具有全局范围的扩展

javascript - 如何使用类名使用 Jquery 获取文本区域内的文本内容

javascript - [Vue警告] : Missing required prop

javascript - 在动态内容的动态元素上使用相同的工具提示工具提示

python - 如何在 Python 脚本中获得导入类的相同作用域?

c# - 从服务器上的数据库重定向到本地进行测试

javascript - 传递 jQuery 或不同全局的模块模式

javascript - Javascript 中的模块模式和揭示模块模式是否仅在创建 API 时有用?