🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
## AMD 异步模块定义(Asynchronous Module Definition,简称AMD)已经引领了前端潮流,[`RequireJS`](http://requirejs.org/docs/) 已经是最流行的实现方式。 ### requireJS 官方API : http://requirejs.org/docs/api.html RequireJs 很好的解决了两个问题及其优势: 1. 实现js文件的异步加载,避免网页失去响应; 2. 管理模块之间的依赖性,便于代码的编写和维护。 3. 基于AMD模块化机制,让前端代码也能实现模块化。 一个导出模块的例子 : `foo.js` ```js define(['jquery', 'underscore'], function ($, _) { // methods function a(){}; // private because it's not returned (see below) function b(){}; // public because it's returned function c(){}; // public because it's returned // exposed public methods return { b: b, c: c } }); ``` 定义的第一部分是依赖的数组,而第二部分基本上是仅在第一部分声明好才能执行的回调函数。(像 RequireJS 这种脚本加载器才会关心这部分,包括找出依赖文件的位置) 注意:定义中的依赖顺序很重要! 还要注意的是,我们可以映射依赖到我们想要的变量上。如果我们将上面代码中的`$`改为`$$`,那我们下面代码的函数块中引用到 `jQuery` 时都得用 `$$` 代替 `$` 。 最重要的一点是:你绝对不能在上述代码外的函数中引用变量 `$` 和 `_` ,因为它对于外面来说就是一个不透明的沙箱。这就是那些规范想要达到的目标! 引用脚本 : ```js require(['jquery'], function(a){ a('body').css({'background-color':'#f00'}); }); ``` 注意,这里引入 jquery,并没有使用默认名称 $ ,而是将之更名为 a,再进行调用。