alsotang / node-lessons

:closed_book:《Node.js 包教不包会》 by alsotang
16.54k stars 4.7k forks source link

闭包的一个坑,结果不是12345 #79

Closed uinz closed 8 years ago

uinz commented 8 years ago

闭包的一个坑

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

上面这个代码块会打印五个 5 出来,而我们预想的结果是打印 1 2 3 4 5。

应该是 0 1 2 3 4

WoHal commented 8 years ago

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

XGHeaven commented 8 years ago

@WoHal 请不要误导,谢谢,你那样写成同步执行了

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

@yinzSE 这不是异步的坑,是你对js还不是很了解,你需要明白他的作用域之间的关系

alsotang commented 8 years ago

@WoHal 真坑啊你

WoHal commented 8 years ago

@alsotang 哈哈, 必须坑

XGHeaven commented 8 years ago

@WoHal :joy:

uinz commented 8 years ago

@XGHeaven 我的意思是, 我们预期的结果应该是 0 1 2 3 4, 而不是 1 2 3 4 5 i 是 从 0 开始的 image 因为使用闭包写 我们得到的也是 0 1 2 3 4

XGHeaven commented 8 years ago

@yinzSE 没懂。。

uinz commented 8 years ago

@XGHeaven 我的意思就是这句话应该这么改下..

上面这个代码块会打印五个 5 出来,而我们预想的结果是打印 1 2 3 4 5 0 1 2 3 4。

看来我的表达能力是个问题...

XGHeaven commented 8 years ago

哦,好吧😂我懂了

alsotang commented 8 years ago

噢噢,你是在跟我反映问题啊。。

2016-01-13 0:55 GMT+08:00 Xu Tianyang notifications@github.com:

哦,好吧😂我懂了

— Reply to this email directly or view it on GitHub https://github.com/alsotang/node-lessons/issues/79#issuecomment-170973549 .

alsotang commented 8 years ago

修正了

2016-01-13 11:56 GMT+08:00 alsotang alsotang@gmail.com:

噢噢,你是在跟我反映问题啊。。

2016-01-13 0:55 GMT+08:00 Xu Tianyang notifications@github.com:

哦,好吧😂我懂了

— Reply to this email directly or view it on GitHub https://github.com/alsotang/node-lessons/issues/79#issuecomment-170973549 .