首页 > Web开发 > 详细

从零开始学JS之闭包

时间:2015-12-11 01:23:13      阅读:203      评论:0      收藏:0      [点我收藏+]

有以下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 ,这个案列今天才看懂,无语。。。。。。。。。

判断一个程序是不是闭包,从三点可以看出来,第一点,这一定是一个函数嵌套,第二,内层函数使用外层函数的局部变量,第三,内层函数被返回到外部,在外部调用。

可以说,它先用一个外层函数封装了一个变量,这个变量是受保护的变量,然后在内层函数中操作外层函数的这个变量,最后外层函数将内层函数返回到外部,在外部就可以被反复调用了,这大概就是闭包吧,今天才恍然大悟,不过还是有好多好多的闭包题会做错,慢慢来吧。

 

从零开始学JS之闭包

原文:http://www.cnblogs.com/yuqin-home/p/5037741.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!