function a(){
function b(){
var bbb=234;
console.log(aaa);
}
var aaa=123;
return b;
}
var glob =100;
var demo=a();
demo();
//内部函数保存到外部一定生成闭包
function a(){
var num=100;
function b(){
num++;
console.log(num);
}
return b;
}
var demo=a();
demo(); //101
demo(); //102
//aAO{num:102}
闭包 累加器
function add(){
var count=0;
function demo(){
count++;
console.log(count);
}
return demo;
}
var count =add();
count();
count();
可以做缓存
function test(){
var num=100;
function a(){
num++;
console.log(num);
}
function b(){
num--;
console.log(num);
}
return[a,b];
}
var myArr=text();
myArr[0](); //101
myArr[1](); //100
function eater(){
var food="";
var obj={
eat:funtion(){
console.log("i am eating "+food);
food="";
},
push:function(myFood){
food=myFood;
}
return obj;
}
var eater1=eater();
var eater2=eater();
eater1.push(‘banana');
eater1.eat();
function test(){
var arr=[];
for(var i=0;i<10;i++){
arr[i]=function(){
duncument.write(i);
}
}
return arr;
}
var myArr=test();
for (var j=0;j<10;j++)
{
myArr[j]();
}
// 10 10 10 10 10 10 10 10 10 10
//函数定义时没有意义,执行的时候再去看
变量私有化
function Deng(name,wife){
var prepareWife="xiaowang" //私有化变量
this.name=name;
this.wife=wife;
this.divorce=function(){
this.wife=prepareWife;
}
this.changePrepareWife=function(target){
prepareWife=target;
}
}
var deng=new Deng("deng","xiaoliu")
deng.prepareWife // underfined