为了对闭包有更好的理解,我们看以下代码
比如我想返回一个数组,数组里面有5个函数,第一个函数弹出0,第二个弹出1...
代码如果这样写
复制代码 代码如下:
function box(){
var arr=[];
for(i=0;i<5;i++){
arr=function(){return i;}
}
return arr;
}
var a=box();
alert(a);//包含五个函数体的数组
alert(a[0]());
alert(a[1]());
弹出的函数体
function(){return i;} }
最后这个i是4,之后++成为5
For循环停止
发现均弹出5,明显不符合我们的要求
解决方案1
自我即时执行里面的函数
复制代码 代码如下:
function box(){
var arr=[];
for(i=0;i<5;i++){
arr=(function(num){return i;})(i);
}
return arr;
}
var a=box();
for(var i=0;i<a.length;i++){
alert(a);
}
但是我们发现 返回的数组里的元素是函数执行的结果,但我们想要的是函数有得升级我们的代码
解决方案2
闭包实现
复制代码 代码如下:
function box(){
var arr=[];
for(var i=0;i<5;i++){
arr=(function(num){
return function(){return num;}
})(i);
}
return arr;
}
var arr=box();
for(var i=0;i<5;i++){
alert(arr());//0,1,2,3,4
}
关键代码
复制代码 代码如下:
arr=(function(num){
return function(){return num;}
})(i);
i=0 时
arr[0]=(function(num){return function(){return num;}})(0);
1时
arr[1]=(function(num){return function(){return num;}})(1);
以上就是闭包的好处!非常简单实用吧。
您可能感兴趣的文章: