javascript - dojo 1.7 AMD 框架有什么好处?

标签 javascript dojo

我一直在阅读有关 dojo 1.7 加载程序如何使用 AMD API/框架的信息 herehere too ,我在其中一张幻灯片上看到了这句话:“AMD(的)最大的好处是无法按需加载脚本,正如某些人可能认为的那样,最大的好处是代码组织的增加/模块化以及减少对全局变量/命名空间的需求。”但我的问题是,如果你需要访问另一个函数的执行上下文(以及另一个函数的“私有(private)”变量),难道不能通过使用普通的 js 函数和 dojo.hitch() 来避免全局变量吗?换句话说,除了只异步加载你需要的东西,AMD 框架的好处是什么?

最佳答案

AMD 的好处是拥有一个模块系统,类似于其他语言中的命名空间系统。在 JavaScript 中,我们经常用全局变量伪造它,但是模块提供了一些特定的好处:

These modules are offered privacy of their top scope, facility for importing singleton objects from other modules, and exporting their own API.

--- 来自CommonJS Modules/1.1.1 spec ,一切由此开始。

这里的关键是 import/export 设施。以前每个人都在临时使用全局变量(如 window.jQuerywindow._ 等)来做这件事。要获得 jQuery 的导出功能,您必须知道神奇的名称,希望没有人与它发生冲突,并确保 jQuery 脚本在您的脚本之前加载。无法以声明方式指定您对 jQuery 的依赖性,并且 jQuery 无法说“这就是我导出的内容”,只能将它们填充到全局 window.jQuery 对象中。

模块格式解决了这个问题:每个模块都导出特定的函数,例如

// math.js
define(function (require, exports, module) {
    exports.add = function (a, b) { return a + b; };
});

并且每个模块都可能需要特定的其他模块,例如

// perimeter.js
define(function (require, exports, module) {
    var math = require("math");

    exports.square = function (side) {
        return math.add(math.add(side, side), math.add(side, side));
    };
});

为什么 AMD 应该成为首选的模块系统,James Burke,RequireJS 的作者---一个很像 Dojo 的 AMD 加载器---写了 a blog post detailing why he thinks AMD is the best .

关于javascript - dojo 1.7 AMD 框架有什么好处?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9164326/

相关文章:

javascript - 如何使 dijit/编辑器手动调整大小?

javascript - 如何使用 node.js 向 Google Drive API 发出 3000 个请求而不超过用户速率限制?

javascript - 从第 '1' 行的数据源请求未知参数 '0'

javascript - 带有输入建议的搜索栏(动态占位符)

javascript - Requirejs 无法编译我的 dojo 依赖模块

java - 单击使用唯一按钮标签的按钮

javascript - 有没有办法禁用 dojox.mobile.switch?

javascript - 用javascript显示html5音频的当前音量?

javascript - ExtJs 组合过滤无法正常工作

javascript - dojo AMD构造函数可以调用自己定义的函数吗?