dojo 1.7 AMD 框架有什么好处?

2024-02-02

我一直在阅读有关 dojo 1.7 加载程序如何使用 AMD API/框架的内容here http://dojotoolkit.org/blog/learn-more-about-amd and here too http://livedocs.dojotoolkit.org/loader/amd,我在其中一张幻灯片上看到了这句话:“AMD 最大的好处是无法按需加载脚本,正如有些人可能认为的那样,最大的好处是代码组织的增加/模块化以及对全局/命名空间的需求减少。”但我的问题是,是否不能通过使用普通的 js 函数来避免全局变量,如果您需要访问另一个函数的执行上下文(以及另一个函数的“私有”变量),也许可以使用 dojo.hitch() ?换句话说,除了异步加载你需要的东西之外,AMD框架还有什么好处呢?


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

这些模块提供了其顶级范围的隐私、从其他模块导入单例对象以及导出自己的 API 的功能。

- - 来自CommonJS 模块/1.1.1 规范 http://wiki.commonjs.org/wiki/Modules/1.1.1,这一切开始了。

这里的关键是进出口设施。以前每个人都是用全局变量(比如window.jQuery, window._, ETC。)。要获得 jQuery 的导出功能,您必须知道这个神奇的名称,希望没有人与它发生冲突,并确保 jQuery 脚本在您的脚本之前加载。没有办法以声明方式指定对 jQuery 的依赖,并且 jQuery 也没有办法说“这就是我导出的”,除了将它们填充到全局变量中之外。window.jQuery object.

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

// 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,作者要求JS http://requirejs.org/---AMD 加载器很像 Dojo --- 写的一篇博客文章详细说明了为什么他认为 AMD 是最好的 http://tagneto.blogspot.com/2011/04/on-inventing-js-module-formats-and.html.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

dojo 1.7 AMD 框架有什么好处? 的相关文章

随机推荐