js模块化编程的浅谈理解

js模块目前分为2中:CommonJS,AMD,CMD

模块化编程的意义就在于,代码的管理,有了模块,就可以很方便的使用别人的代码,想要什么模块就加载什么模块。


NodeJS是CommonJS规范的实现,webpack 也是以CommonJS的形式来书写.

打个比方有一个模块文件 main.js
语法:
var math = require('math');
//定义一个全局方法来加载模块
var math = require('math');
math.add(2,3); 


require()用来引入外部模块;
exports对象用于导出当前模块的方法或变量,唯一的导出口;
module对象就代表模块本身。
举个例子:
var module = {
  exports: {}
};

(function(module, exports) {
  exports.multiply = function (n) { return n * 1000 };
}(module, module.exports))

var f = module.exports.multiply;
f(5) // 5000 

向一个立即执行函数提供 moduleexports 两个外部变量,
模块就放在这个立即执行函数里面。模块的输出值放在 module.exports 之中,
这样就实现了模块的加载

CDM是基于seajs的规范,主要通过export暴露接口,require引入模块,其主要是延迟加载

语法:
define(function(require,exports,module){...});

AMD是基于requirejs的规范,异步方式加载模块,管理模块间的依赖性,推崇依赖就近

语法:
 require(['moduleA', 'moduleB', 'moduleC'], function (moduleA, moduleB, moduleC){

    // some code here

  });
require()函数接受两个参数。第一个参数是一个数组,表示所依赖的模块,
第二个参数是一个回调函数,当前面指定的模块都加载成功后,它将被调用,
加载的模块会以参数形式传入该函数,从而在回调函数内部就可以使用这些模块。

require()异步加载moduleA,moduleB和moduleC,浏览器不会失去响应;它指定的回调函数,只有前面的模块都加载成功后,才会运行,解决了依赖性的问题。

猜你喜欢

转载自blog.csdn.net/Amy_cloud/article/details/80503155
今日推荐