1、立即执行函数(不暴露私有成员变量)
var module1 = (function(){
var _count = 0;
var m1 = function(){
//...
};
var m2 = function(){
//...
};
return {
m1 : m1,
m2 : m2
};
})();
2、放大模式:模块很大 或 一个模块需要继承另一个模块
var module1 = (function (mod){
mod.m3 = function () {
//...
};
return mod;
})(module1);
3、宽放大模式:不确定各个模块的加载顺序、"立即执行函数"的参数可以是空对象
var module1 = ( function (mod){
//...
return mod;
})(window.module1 || {});
4、
目前,通行的Javascript模块规范共有两种:CommonJS和AMD。
// 在CommonJS中,有一个全局性方法require(),用于加载模块。
var math = require('math');
math.add(2,3); // 5
// 只适用于服务端环境,如果是浏览器环境:第二行math.add(2, 3),在第一行require('math')之后运行,因此必须等math.js加载完成。也就是说,如果加载时间很长,整个应用就会停在那里等。
// 因此,浏览器模块不能采用同步加载,需要用异步加载,这就是AMD诞生背景
5、AMD
// AMD也采用require()语句加载模块,但是不同于CommonJS,它要求两个参数
// require([module], callback);
require(['math'], function (math) {
math.add(2, 3);
});
6、require.js
6.1、目的:
(1)实现js文件的异步加载,避免网页失去响应;
(2)管理模块之间的依赖性,便于代码的编写和维护。
6.2、加载
下载最新版 https://requirejs.org/docs/download.html
;
js子目录下放,放网页底部 <script src="js/require.js" defer async="true" ></script>