有以下JS代码
function outer(){
for(var i=0,arr=[];i<3;i++){
arr[i]=function(){return i};
}
return arr;
}
var getFuns=outer();
getFuns: [
function(){return i},
function(){return i},
function(){return i}
]
console.log(getFuns[0]()); //3
console.log(getFuns[1]()); //3
console.log(getFuns[2]()); //3
*********************************************************************************************************************
在以上的程序中,i是受保护的变量,for循环后返回的i的值为3,外层函数调用了一次,调用后,它的作用域链释放之后,它的活动对象不会随着它的释放而释放,它是一个受保护的变量,所有最后输出都是3 ,这个案列今天才看懂,无语。。。。。。。。。
判断一个程序是不是闭包,从三点可以看出来,第一点,这一定是一个函数嵌套,第二,内层函数使用外层函数的局部变量,第三,内层函数被返回到外部,在外部调用。
可以说,它先用一个外层函数封装了一个变量,这个变量是受保护的变量,然后在内层函数中操作外层函数的这个变量,最后外层函数将内层函数返回到外部,在外部就可以被反复调用了,这大概就是闭包吧,今天才恍然大悟,不过还是有好多好多的闭包题会做错,慢慢来吧。
原文:http://www.cnblogs.com/yuqin-home/p/5037741.html