为什么放在一起?
模块化本身就自带闭包性质的体现。下面代码:
<span style="white-space:pre"> </span>//定义可多次实例化的模块foo
function foo () {
console.log("foo run");
var num = 0;
return {
addNum: function () {
num++;
},
showNum: function () {
console.log(num);
}
}
}
var bar = foo();
var zar = foo();
bar.addNum();
bar.showNum();
zar.showNum();
//使用IIFE的方式实例化模块tar,单例模式
//IIFE会建立新作用域。这里因为在运行结束后返回了一个含有该作用域引用的函数,形成闭包
var tar = (function () {
console.log("tar run");
var num = 0;
return {
addNum: function () {
num++;
},
showNum: function () {
console.log(num);
}
}
})()
tar.showNum();
什么是闭包呢?看下图: