Dojo 1.7 AMD框架有什么好处?

3
我一直在阅读关于dojo 1.7加载器如何使用AMD API/框架这里这里,并在其中一张幻灯片上发现了这句话:“AMD的最大好处不是能够按需加载脚本,正如一些人可能认为的那样,而是增加了代码组织/模块化以及减少了对全局变量/命名空间的需要。”但我的问题是,普通js函数是否已经可以避免使用全局变量,如果需要访问另一个函数的执行上下文(和另一个函数的“私有”变量),则可以使用dojo.hitch()吗?换句话说,除了异步加载所需内容之外,AMD框架的好处是什么?
1个回答

9
AMD的好处在于拥有模块系统,类似于其他语言中的命名空间系统。在JavaScript中,我们经常使用全局变量来模拟此功能,但是模块提供了许多具体的好处:
这些模块提供了顶级作用域的隐私性、从其他模块导入单例对象的便利性以及导出自己的API。
--- 来自CommonJS Modules/1.1.1 spec,它开创了这一切。
关键在于导入和导出功能。以前每个人都是通过全局变量(如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应该成为模块系统的首选,RequireJS的作者James Burke写了一篇博客文章详细说明他为什么认为AMD是最好的模块系统


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接