为了账号安全,请及时绑定邮箱和手机立即绑定

JS闭包问题

JS闭包问题

慕虎7371278 2019-03-07 14:09:11
for (var i = 1; i < 5; i++) {  setTimeout(function(i) {    console.log(i);  }, 1000 * i);}上面的代码,打印出来为什么是四个undefined,变量i的值为什么传不进去
查看完整描述

4 回答

?
慕勒3428872

TA贡献1848条经验 获得超6个赞

跟闭包无关,改成这样就可以了:


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

  setTimeout(function(i) {

    console.log(i);

  }, 1000 * i,i);

}

setTimeout(function[, delay, param1, param2, ...]) 你没有给 function 传 param,所以 i 是 undefined


MDN


查看完整回答
反对 回复 2019-03-18
?
蝴蝶刀刀

TA贡献1801条经验 获得超8个赞

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


查看完整回答
反对 回复 2019-03-18
?
翻翻过去那场雪

TA贡献2065条经验 获得超14个赞

简单的道理,你调用函数没传参数但在函数内用到了参数


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

  setTimeout(function(i) {

    console.log(i);

  }, 1000 * i, i);

}


查看完整回答
反对 回复 2019-03-18
?
RISEBY

TA贡献1856条经验 获得超5个赞

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

    setTimeout(function(i) {

        return function() {

            console.log(i)

        }

    }(i), 1000 * i)

}  

可以这样通过闭包来实现,你的代码没有传参


查看完整回答
反对 回复 2019-03-18
  • 4 回答
  • 0 关注
  • 422 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信