3 回答

TA貢獻(xiàn)25條經(jīng)驗(yàn) 獲得超1個(gè)贊
因?yàn)榇藭r(shí)循環(huán)結(jié)束后, i是10, 因此不管你調(diào)用`arr[5]()`還是`arr[6]()`都是打印10.?
解決這種問(wèn)題 ES3/5 可以使用閉包和自執(zhí)行函數(shù). 最簡(jiǎn)潔的還是將`var`聲明替換為`let`. 不過(guò)這是ES6的語(yǔ)法.
ES3/5方式:
var?arr?=?[]?; for(var?i=0;i<10;i++){ ??arr[i]?=?(function(i){ ????return?function?()?{ ??????console.log(i) ????} ??})(i) } arr[5]()????//?5 arr[9]()????//?9

TA貢獻(xiàn)35條經(jīng)驗(yàn) 獲得超15個(gè)贊
你把var變成let 就是你想要的了,因?yàn)楹瘮?shù)里面只是一個(gè)console.log() 動(dòng)作.里面的變量i是這10個(gè)函數(shù)公用的一個(gè)變量。所以循環(huán)結(jié)束,i就變成了10.
用let的話(huà),就是把每一個(gè)循環(huán)變成了塊級(jí)作用域,也可以利用函數(shù)作用域
arr[i]=function(){ var?temp=i; console.log(temp); } }

TA貢獻(xiàn)79條經(jīng)驗(yàn) 獲得超19個(gè)贊
注意看循環(huán)體
只是簡(jiǎn)單的賦值操作而已
循環(huán)結(jié)束,i的值為10,這個(gè)時(shí)候輸出自然為10
添加回答
舉報(bào)