AMD是"Asynchronous Module Definition"的缩写,意思就是"异步模块定义"。它采用异步方式加载模块,模块的加载不影响它后面语句的运行。所有依赖这个模块的语句,都定义在一个回调函数中,等到加载完成之后,这个回调函数才会运行。
require([module], callback);
在CommonJS中,有一个全局性方法require(),用于加载模块。假定有一个数学模块math.js,就可以像下面这样加载。
var math = require('math');
在define下也有所不同
1.对于依赖的模块,AMD(Asynchronous Module Definition)异步模块加载机制 是提前执行,CMD(common module definition)模块定义规范 是延迟执行。不过 RequireJS 从 2.0 开始,也改成可以延迟执行(根据写法不同,处理方式不同)。CMD 推崇 as lazy as possible.
2. CMD 推崇依赖就近,AMD 推崇依赖前置。看代码:
2. CMD 推崇依赖就近,AMD 推崇依赖前置。看代码:
// CMD define(function(require, exports, module) { var a = require('./a') a.doSomething() // 此处略去 100 行 var b = require('./b') // 依赖可以就近书写 b.doSomething() // ... }) // AMD 默认推荐的是 define(['./a', './b'], function(a, b) { // 依赖必须一开始就写好 a.doSomething() // 此处略去 100 行 b.doSomething() ... })
说道正题。。
先去官网下载require.js放到网页底部加载,加载一个main.js
<script type="text/javascript" src="require.js" defer async="true" data-main="main"></script>
main.js下面放
require(['math'], function (math){ alert(math.add(1,1)); });
math.js下面放
define(function (){ var add = function (x,y){ return x+y; }; return { add: add }; });
本文参考
作者:玉伯
链接:https://www.zhihu.com/question/20351507/answer/14859415
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处
和阮一峰的require.jshttp://www.ruanyifeng.com/blog/2012/10/asynchronous_module_definition.html