function a(){
var num = 0;
function b(){
num++;
console.log(num)
}
return b;
}
var demo = a();
demo();//打印第一次1
demo();//打印第二次2
a执行b定义,并被保存下来
闭包通俗讲就是:内部函数通过return保存在外部了,
闭包会导致原有作用域链不释放,造成内存泄漏。
闭包的作用:
1.实现公有变量;
2.可以做缓存(存储机制);
3.可以实现封装,属性私有化;
4.模块化开发,防止污染全局变量;

function test(){
var num = 10;
function a(){
num++;
console.log(num); //11
}
function b(){
num--;
console.log(num); //10
}
return [a,b];
}
var myArr = test();
myArr[0]();
myArr[1]();

缓存例子效果;
function a(){
var list = "";
var obj = {
b:function(){
console.log(111)
list = "";
},
push:function(){
list = myList;
}
}
return obj;
}

var demo = a();
demo.push("bob");
demo.a();

立即执行函数:执行后被释放;适合初始化工作。
(function(){}());//w3c推荐第一种;
(function(){})();
传参是一样的,也一样有返回值;
如:
var num =(function(a,b,c){
var d = a+b+c
return d;
}(1,2,3))

num = 6;