2010-04-24 90 views
0

为什么下面的代码打印“0 5 10 15 20 ... 100”?Javascript关闭问题

(function() { 
for (var i = 100; i >= 0; i -= 5) { 
    (function() { 
     var pos = i; 
     setTimeout(function() { 
      console.log(" pos = " + pos); 
     }, (pos + 1)*10); 
    })(); 
} 
})(); 

我声明pos = i,它应该按降序排列。此代码源自John Resig的fadeIn()函数,在他的书“Pro javascript技术”中。

回答

7

你注册以正确的顺序超时,问题是他们在他们的价值秩序计时,因此价值10将在100ms的打印,在1000毫秒值100等

所以你需要更改计时计算以从最大值中减去(在本例中为100)

(function() { 
for (var i = 100; i >= 0; i -= 5) { 
    (function() { 
     var pos = i; 
     setTimeout(function() { 
      console.log(" pos = " + pos); 
     }, (100 - pos + 1)*10); // note the subtraction here 
    })(); 
} 
})();