JS闭包问题

for (var i = 1; i < 5; i++) {

  setTimeout(function(i) {

    console.log(i);

  }, 1000 * i);

}

上面的代码,打印出来为什么是四个undefined,变量i的值为什么传不进去


慕虎7371278
浏览 423回答 4
4回答

慕勒3428872

跟闭包无关,改成这样就可以了:for (var i = 1; i < 5; i++) {&nbsp; setTimeout(function(i) {&nbsp; &nbsp; console.log(i);&nbsp; }, 1000 * i,i);}setTimeout(function[, delay, param1, param2, ...]) 你没有给 function 传 param,所以 i 是 undefinedMDN

蝴蝶刀刀

因为你&nbsp;function(i)&nbsp;这里把&nbsp;i&nbsp;的声明覆盖了啊。

翻翻过去那场雪

简单的道理,你调用函数没传参数但在函数内用到了参数for (var i = 1; i < 5; i++) {&nbsp; setTimeout(function(i) {&nbsp; &nbsp; console.log(i);&nbsp; }, 1000 * i, i);}

RISEBY

for (var i = 0; i < 5; i++) {&nbsp; &nbsp; setTimeout(function(i) {&nbsp; &nbsp; &nbsp; &nbsp; return function() {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; console.log(i)&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; }(i), 1000 * i)}&nbsp;&nbsp;可以这样通过闭包来实现,你的代码没有传参
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript