dojo 1.7 AMD 框架有啥好处?

Posted

技术标签:

【中文标题】dojo 1.7 AMD 框架有啥好处?【英文标题】:what's the benefit of the dojo 1.7 AMD framework?dojo 1.7 AMD 框架有什么好处? 【发布时间】:2012-02-06 17:26:09 【问题描述】:

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

【问题讨论】:

【参考方案1】:

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 的作者——一个与 Dojo 非常相似的 AMD 加载程序——的作者 James Burke 写了 a blog post detailing why he thinks AMD is the best。

【讨论】:

以上是关于dojo 1.7 AMD 框架有啥好处?的主要内容,如果未能解决你的问题,请参考以下文章

AMD 和 Dojo 1.7 问题

Dojo 1.7 Ajax 内容和 AMD 要求

AMD/Dojo 1.7 单页应用程序:将 Require() 放在哪里?

percore有啥好处

使用 ORM 工具(框架)有啥好处?

定义外键有啥好处