ZXJ03
2017-04-14 22:53:51
例: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]);
}
這個打印出來的結(jié)果是0,1,2,3,4
3 回答

學(xué)海無涯樂悠悠
TA貢獻4條經(jīng)驗 獲得超0個贊
1.第一行 ;function box{}應(yīng)該是function box();屬于手誤。
2.第一個問題,為什么打印出來是55555:因為box()返回一個數(shù)組-arr,arr[0]=function(){return i},........arr[4]=function(){return i}。i的值一直被引用,并沒有被垃圾回收(renturn i還在引用),理解為box對象的私有變量。循環(huán)完i=5;所以不管是arr[0]()=5,......還是到arr[4]()都=5;注意在循環(huán)的過程中arr[0]()=0,arr[1]()=1。因為循環(huán)過程中i的值是從0到4.
接下來b=box(),循環(huán)調(diào)用b[0]().......b[4]();輸出仍然一直為5;
3.第二個問題,比較容易理解,調(diào)用box()返回一個數(shù)組,內(nèi)容為arr[0]=0,arr[1]=1,.....arr[4]=4;下面遍歷輸入自然是0,1,2,3,4。
添加回答
舉報
0/150
提交
取消