AMD

作者: 弹指一挥间_e5a3 | 来源:发表于2020-04-26 10:50 被阅读0次

    一、AMD

    AMD 是英文 Asynchronous Module Definition异步模块定义)的缩写,它是由 JavaScript 社区提出的专注于支持浏览器端模块化的标准。从名字就可以看出它与 CommonJSES6Module 最大的区别在于它加载模块的方式是异步的。下面的例子展示了如何定义一个 AMD 模块。

    define('getSum', ['calculator'], function(math) {
        return function(a, b) {
            console.log('sum: ' + calculator.add(a, b));
        }
    });
    

    AMD 中使用 define 函数来定义模块,它可以接受3个参数。

    • 第1个参数是当前模块的 id ,相当于模块名;

    • 第2个参数是当前模块的依赖,比如上面我们定义的 getSum 模块需要引入 calculator 模块作为依赖;

    • 第3个参数用来描述模块的导出值,可以是函数或对象。如果是函数则导出的是函数的返回值;如果是对象则直接导出对象本身。

    CommonJS 类似,AMD 也使用 require 函数来加载模块,只不过采用异步的形式。

    require(['getSum'], function(getSum) {
        getSum(2, 3);
    });
    

    通过 AMD 这种形式定义模块的好处在于其模块加载是非阻塞性的,当执行到 require 函数时并不会停下来去执行被加载的模块,而是继续执行 require 后面的代码,这使得模块加载操作并不会阻塞浏览器

    尽管 AMD 的设计理念很好,但与同步加载的模块标准相比其语法要更加冗长。另外其异步加载的方式并不如同步显得清晰,并且容易造成回调地狱(callback hell)。在目前的实际应用中已经用得越来越少,大多数开发者还是会选择 CommonJSES6 Module 的形式。

    相关文章

      网友评论

          本文标题:AMD

          本文链接:https://www.haomeiwen.com/subject/ywhdwhtx.html