例:function box{
var arr=[];
for(var i=0;i<5;i++){
arr[i]=function(){
return i;
};
}
return arr;
}
var b=box();
for(var i=0;i<5;i++){
alert(b[i]());
}
为什么这个打印出来的是55555
而下面这个
function box{
var arr=[];
for(var i=0;i<5;i++){
arr[i]=(function(num){
return function(){
return num;
}
})(i);
}
return arr;
}
var b=box();
for(var i=0;i<5;i++){
alert(b[i]);
}
这个打印出来的结果是0,1,2,3,4
3 回答
学海无涯乐悠悠
TA贡献4条经验 获得超0个赞
1.第一行 ;function box{}应该是function box();属于手误。
2.第一个问题,为什么打印出来是55555:因为box()返回一个数组-arr,arr[0]=function(){return i},........arr[4]=function(){return i}。i的值一直被引用,并没有被垃圾回收(renturn i还在引用),理解为box对象的私有变量。循环完i=5;所以不管是arr[0]()=5,......还是到arr[4]()都=5;注意在循环的过程中arr[0]()=0,arr[1]()=1。因为循环过程中i的值是从0到4.
接下来b=box(),循环调用b[0]().......b[4]();输出仍然一直为5;
3.第二个问题,比较容易理解,调用box()返回一个数组,内容为arr[0]=0,arr[1]=1,.....arr[4]=4;下面遍历输入自然是0,1,2,3,4。
添加回答
举报
0/150
提交
取消