在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/HTML/ 關(guān)于js立即執(zhí)行函數(shù)的問題

關(guān)于js立即執(zhí)行函數(shù)的問題

代碼如下,已知結(jié)果是立即輸出0,1,2,3,4,看解釋說是輸入的i是undefined;但是在for循環(huán)內(nèi)部不是應(yīng)該可以取到i的值嗎?
我想知道為什么會是立即輸出0,1,2,3,4,而不是每隔1秒輸出一個數(shù)字。懇請大腿解釋一下。。。

for (var i = 0; i < 5; i++) {
  setTimeout((function(i) {
    console.log(i);
  })(i), i * 1000);
}
回答
編輯回答
孤影
為什么會是立即輸出0,1,2,3,4,而不是每隔1秒輸出一個數(shù)字

如果要每隔一段時間執(zhí)行一次,

for (var i = 0; i < 5; i++) {
  setTimeout(fn, i * 1000);
}

而你調(diào)用了立即執(zhí)行函數(shù),實際上是:

for (var i = 0; i < 5; i++) {
  setTimeout(fn(), i * 1000);
}

能明白么?

(function(i) {
    console.log(i);
  })(i)

你再看看你這個代碼,是 fn 還是 fn()

2018年6月25日 03:25
編輯回答
敢試
(function(i) {
    console.log(i);
})(i)

這個函數(shù)執(zhí)行完會返回一個undefined(因為沒有return的值),所以你的代碼相當(dāng)于

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

如果想按順序每隔1秒輸出一個數(shù)字,應(yīng)該寫成下面那樣

for (var i = 0; i < 5; i++) {
    setTimeout((function(i) {
        // 立即執(zhí)行函數(shù)返回一個函數(shù)給定時器
        return function() {
            console.log(i);
        }
    })(i), i * 1000);
}
2018年5月4日 23:32