为什么以下代码打印“0 5 10 15 20 ... 100”?
(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技术”中。
答案 0 :(得分:7)
您正在以正确的顺序注册超时,问题是它们按照其值的顺序计时,因此值10将以100毫秒打印,值100打印在1000毫秒等等。
因此,您需要更改时序计算以从最大值中减去(在本例中为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
})();
}
})();