3 回答

TA貢獻(xiàn)1875條經(jīng)驗(yàn) 獲得超3個(gè)贊
閉包解決,經(jīng)典問(wèn)閉包的方式,i
是全局變量,在調(diào)用時(shí)其值為3
,所以全部是undefined
,目前的基本可以采用let
來(lái)解決了

TA貢獻(xiàn)1780條經(jīng)驗(yàn) 獲得超1個(gè)贊
閉包是一個(gè)自帶運(yùn)行環(huán)境的函數(shù),題中的閉包function函數(shù)本地作用域中沒有i這個(gè)變量,只能沿著作用域鏈往上查找,而上級(jí)作用域中的i最終為3。
var apples = ["apple1", "apple2", "apple3"];
for (var i = 0, funs = []; i < 3;i ++){
funs[i] = (function(x){
return function(){
console.log(apples[x]);
}
})(i);
}
funs[0]();
funs[1]();
funs[2]();
將代碼改成這樣的話,就可以分別輸出。
為什么這樣就可以了呢?
因?yàn)榘裪每次的值都放到上級(jí)作用域鏈里面了。
添加回答
舉報(bào)