function F(){
var arr=[],i;
for(i=0;i<3;i++){
arr[i]=function(){
return i;
};
}
return arr;
}
arr[0]();//3
arr[1]();//3
arr[2]();//3
function F(){
var arr=[],i;
for(i=0;i<3;i++){
arr[i]=function(){
return i;
};
}
return arr;
}
arr[0]();//3
arr[1]();//3
arr[2]();//3
js顺序执行,首先执行所有的循环,在执行的过程中以此arr[0]= function(){return i;},arr[1]= function(){return i;},arr[2]= function(){return i;}同时i循环后编程3,接着调用arr[0]()等调用的时候,此时作用域内的i是3,所以依次都会是3.
PS: 这题应该会先执行arr = F()把,否则会报错呀~~
10 回答11.2k 阅读
5 回答4.9k 阅读✓ 已解决
4 回答3.1k 阅读✓ 已解决
2 回答2.8k 阅读✓ 已解决
3 回答2.4k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
2 回答2.6k 阅读✓ 已解决
for(i=0;i<3;i++){循环体}
执行过程是赋初值0,然后执行判断语句i<3
,为true的话,执行循环体,循环体执行完之后执行i++
;所以当i执行到2的时候,i<3
为true,执行循环体,然后i++,此时i等于3,然后判断i<3
,判断为false,不执行循环体,退出循环,此时i=3
;