第 1 行至第 10 行
模块化知识
在 ES6 之前,社区制定了一些模块加载方案,最主要的有 CommonJS 和 AMD 两种。前者用于服务器,后者用于浏览器。
- CommonJS
- CMD
- AMD
- ES6模块
具体可参考:模块化的全面总结
模块化变迁历史:函数=》对象=》闭包
闭包
拥有独立的词法作用域,内存中只会存在一份 copy。这不仅避免了外界访问此 IIFE 中的变量,而且又不会污染全局作用域,通过 return 暴露出公共接口供外界调用。这其实就是现代模块化实现的基础。
var module = (function(){
var _count = 0;
var fn1 = function (){
// ...
}
var fn2 = function fn2(){
// ...
}
//只有return的变量才可被外部访问
return {
count:_count,
fn1: fn1,
fn2: fn2
}
})()
console.log('module',module)
CommonJS
同步加载,它使用 require 引用和加载模块,exports 定义和导出模块,module 标识模块。使用 require 时需要去读取并执行该文件,然后返回 exports 导出的内容。
CMD
CMD规范专门用于浏览器端,模块的加载是异步延迟加载,AMD是异步提前加载
define(function (require) {
var m1 = require('./module1')
var m4 = require('./module4')
m1.show()
m4.show()
})