鍍金池/ 問答/HTML/ JS閉包問題

JS閉包問題

for (var i = 1; i < 5; i++) {
  setTimeout(function(i) {
    console.log(i);
  }, 1000 * i);
}

上面的代碼,打印出來為什么是四個(gè)undefined,變量i的值為什么傳不進(jìn)去

回答
編輯回答
初心

因?yàn)槟?function(i) 這里把 i 的聲明覆蓋了啊。

2017年12月28日 08:19
編輯回答
舊言

樓上正解,如果i作為閉包變量使用,就別再使用同名形參,如果使用形參還要需要傳值

2017年5月22日 11:27
編輯回答
糖果果

簡(jiǎn)單的道理,你調(diào)用函數(shù)沒傳參數(shù)但在函數(shù)內(nèi)用到了參數(shù)

for (var i = 1; i < 5; i++) {
  setTimeout(function(i) {
    console.log(i);
  }, 1000 * i, i);
}
2017年3月10日 16:00
編輯回答
墨小羽

跟閉包無關(guān),改成這樣就可以了:

for (var i = 1; i < 5; i++) {
  setTimeout(function(i) {
    console.log(i);
  }, 1000 * i,i);
}

setTimeout(function[, delay, param1, param2, ...]) 你沒有給 functionparam,所以 iundefined

MDN

2018年8月22日 04:59
編輯回答
孤星
for (var i = 0; i < 5; i++) {
    setTimeout(function(i) {
        return function() {
            console.log(i)
        }
    }(i), 1000 * i)
}  

可以這樣通過閉包來實(shí)現(xiàn),你的代碼沒有傳參

2018年1月27日 08:54