JavaScript模块化是通过函数或{}来进行模块化处理的。
在es6之前,没有块级作用域的概念。通过函数创建一个封闭的执行环境,通过var Module={},建立一个对象。但是通过var Module={}很容易被人改写。所以JavaScript大部分通过自执行函数,对外暴露API或者值,来进行处理。
var module = (function() {
var x = 12;
return {
"x1": "",
"test": function() {
console.log("test")
}
}
}
)()
现在有个需求,实现一个新的模块,需要继承module,该如何实现呢?
只需要模module当成入参传入新模块即可
var module1 = (function(module) {
var x = 12;
module.test2 = function() {
console.log("test")
}
return module
}
)(module)
上面有个问题,加入module不存在,程序就会出错,那如何处理呢?
var module1 = (function(module) {
var x = 12;
module.test2 = function() {
console.log("test")
}
return module
}
)(module||{})//传参进行兼容性处理
有了模块化之后,就制定了模块化规范CommonJS和AMD。
CommonJS是同步加载,
var module1=require("./a.js");
var module2=require("./b.js");
module2只有在module1加载完之后才执行。
AMD解决CommonJS同步加载文件导致浏览器卡死,制定了通过回调函数来实现异步加载。
var module1 = require("./a.js", function() {});
var module2 = require("./b.js", function() {})