我一直在阅读dojo 1.7加载器如何在这里和这里使用AMD API /框架,我在其中一张幻灯片上看到了这句话:"AMD(最大)的好处是无法加载脚本正如一些人可能认为的那样,需求最大的好处是代码组织/模块化的增加以及对全局/命名空间的需求减少." 但我的问题是,使用普通的js函数不能避免全局变量,如果需要访问另一个函数的执行上下文(以及另一个函数的'私有'变量),可能还有dojo.hitch()吗?换句话说,除了异步加载你需要的东西之外,AMD框架的好处是什么?
AMD的好处是具有模块系统的好处,类似于其他语言的命名空间系统.在JavaScript中,我们经常使用全局变量伪装它,但模块提供了许多特定的好处:
这些模块提供其顶级范围的隐私,用于从其他模块导入单个对象以及导出自己的API的工具.
---从CommonJS Modules/1.1.1规范开始,全部启动.
这里的关键是进出口设施.此前大家都在这样做的ad-hoc,具有全局(如window.jQuery,window._等).要获得jQuery的导出功能,你必须知道这个神奇的名字,希望没有人与它发生冲突,并确保在你的脚本之前加载了jQuery脚本.没有办法声明性地指定你对jQuery的依赖,而jQuery除了将它们填充到全局window.jQuery对象之外没有办法说"这就是我导出的东西" .
模块格式修复了这个问题:每个模块都导出特定的功能,例如
// math.js
define(function (require, exports, module) {
exports.add = function (a, b) { return a + b; };
});
Run Code Online (Sandbox Code Playgroud)
并且每个模块可以要求特定的其他模块,例如
// 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));
};
});
Run Code Online (Sandbox Code Playgroud)
为什么AMD要选择的模块系统,詹姆斯·伯克,笔者RequireJS --- AMD的装载机很像道场有---写了一篇博客文章,详细说明为什么他认为AMD是最好的.
| 归档时间: |
|
| 查看次数: |
1783 次 |
| 最近记录: |