CommonJS AMD require.js

2009年,美国程序员Ryan Dahl创造了node.js项目,将javascript语言用于服务器端编程。这标志"Javascript模块化编程"正式诞生。

在CommonJS中,有一个全局方法require()用于加载模块,如数学模块math.js  var math = require("math"); math.add(2,3);// 5

这种方式加载模块在浏览器环境有严重问题,就是代码在require()处阻塞,模块都放在服务器端,可能阻塞很长时间,取决于网络环境。但对服务器端不是问题,因为模块都在服务器本地,可以同步加载,只需等待硬盘读取时间

因此,浏览器端的模块,不能使用同步加载,需要异步加载,AMD应运而生

AMD全称Asynchronous Module Definition,即异步模块定义,采用异步方式加载模块,模块的加载不影响后面语句的执行, 所有依赖这个模块的语句,都定义在一个回调函数中,等到加载完成之后,回调函数才会执行

AMD也采用require(),但需要两个参数require([module],callback),第一个参数是数据,里面放入要加载的模块,第二个参数是加载成功后的回调函数

  require(["math"],function(math){math.add(2,3)});

  math加载与math.add()不是同步的,浏览器不会假死,更适合浏览器环境

require.js加载的模块,采用AMD规范。也就是说,模块必须按照AMD的规定来写。具体来说,就是模块必须采用特定的define()函数来定义。如果一个模块不依赖其他模块,那么可以直接定义在define()函数之中。

  例如math.js模块:

  // math.js

  define(function (){

    var add = function (x,y){

      return x+y;

    };

    return {

      add: add
    };

  });

  如果这个模块还依赖其他模块,那么define()函数的第一个参数,必须是一个数组,指明该模块的依赖性。

   define(['myLib'], function(myLib){

    function foo(){

      myLib.doSomething();

    }

    return {

      foo : foo

    };

  });

原文地址:https://www.cnblogs.com/zawjdbb/p/7484649.html