3 回答

TA貢獻(xiàn)1810條經(jīng)驗 獲得超5個贊
那只是標(biāo)準(zhǔn)陰影。
考慮以下代碼:
let x = "outer";
console.log(x);
{
let x = "inner";
console.log(x);
}
console.log(x);
內(nèi)部塊無法訪問外部塊,x
因為它已聲明了同名的局部變量。
同樣,在您的代碼中有兩個變量稱為i
:
a.forEach(i => { setTimeout(i => {
唯一的區(qū)別是它們是函數(shù)參數(shù),而不是用聲明let
。除此之外,它們以相同的方式工作:內(nèi)部i
遮蔽外部i
,防止訪問。要解決此問題,只需移除inner即可i
。setTimeout
無論如何,不會將任何有用的參數(shù)傳遞給回調(diào)。

TA貢獻(xiàn)1872條經(jīng)驗 獲得超4個贊
只是刪除了i在setTimeout
let a = [1,2,3,4,5];
a.forEach((i) => {
setTimeout(() => {
console.log(i);
}, 1000);
});

TA貢獻(xiàn)1818條經(jīng)驗 獲得超7個贊
您的內(nèi)部回調(diào)函數(shù)有一個名為的參數(shù)i
,它會遮蓋外部變量i
。
setTimeout()
不會將任何參數(shù)傳遞到其回調(diào),因此內(nèi)部i
為undefined
。
要使用外部回調(diào)中的參數(shù)或變量,只需使用它。
添加回答
舉報