回首憶惘然
2019-03-11 16:14:00
for(var i=0;i<10;i++){ fnArr[i]=(function(){ var n=i; return function(){ return n } })();}for(var i=0;i<10;i++){ (function(){ var n=i; fnArr[i]=function(){ return n }; })() }以上都是可以讓 fnArr[3]輸出3,而不是10,但是為什么一定都要聲明n=i呢?去了這句話 就不能正確輸出了
2 回答

寶慕林4294392
TA貢獻2021條經(jīng)驗 獲得超8個贊
如果不用var n=i接收i的值,直接返回i,那么后面函數(shù)運行的時候找不到i的值,就回去上層作用域?qū)ふ?,而上層作用域循環(huán)結(jié)束,i的值為10,所以會始終返回10。
而使用了var n=i,想當于把每次循環(huán)中i的值保存在自調(diào)函數(shù)的內(nèi)部,返回函數(shù)運行的時候找不到n的值也會去上層作用域?qū)ふ?,找到了自調(diào)函數(shù)內(nèi)部的n的值,分別對應0-9。
可以這么改,作用相同
for(var i=0;i<10;i++){
fnArr[i]=(function(i){
return function(){
return i
}
})(i);
}

絕地無雙
TA貢獻1946條經(jīng)驗 獲得超4個贊
添加回答
舉報
0/150
提交
取消