为什么计数正确递增

hel*_*hod 4 javascript

考虑这个简单的例子:

var count = 0;
for (var i = 0; i < 4; i++ ) {
    setTimeout(function() {
      console.log(i, count++);
    }, i * 200);
}
Run Code Online (Sandbox Code Playgroud)

输出以下内容

4 0
4 1
4 2
4 3
Run Code Online (Sandbox Code Playgroud)

我猜这i总是解析为4,因为setTimeout回调关闭了变量I,但我无法弄清楚为什么同样不适用于count

var count = 0;
for (var i = 0; i < 4; i++ ) {
  setTimeout(function() {
    console.log(i, count++);
  }, i * 2000 );
}
Run Code Online (Sandbox Code Playgroud)

Poi*_*nty 10

变量ifor循环递增,并4 任何超时处理程序运行之前以该值结束.count另一方面,该变量仅超时处理程序递增.当第一个超时处理程序触发时,count仍将是0.