什么'这是dojo 1.7 AMD框架的好处

what's the benefit of the dojo 1.7 AMD framework?

本文关键字:框架 AMD 这是 dojo 什么      更新时间:2023-09-26

我一直在阅读关于dojo 1.7加载器如何在这里和这里使用AMD API/框架的文章,我在其中一张幻灯片上看到了这句话:"AMD的最大好处是不能按需加载脚本,正如一些人可能认为的那样,最大的好处是增加了代码组织/模块化,还减少了对全局/名称空间的需求。"但我的问题是,如果你需要访问另一个函数的执行上下文(和另一个功能的‘私有’变量),就不能通过使用普通的js函数来避免全局变量吗?换句话说,除了异步加载你需要的东西之外,AMD框架的好处是什么?

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

这些模块提供了其顶级范围的隐私,用于从其他模块导入单例对象,并导出自己的API。

---从CommonJS Modules/1.1.1规范开始。

这里的关键是进出口设施。以前每个人都是用全局变量(如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是最好的。RequireJS是一款与Dojo非常相似的AMD加载程序。