为什么下面的代码打印“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 在他的《Pro javascript 技术》一书中的 fadeIn() 函数。
最佳答案
您正在以正确的顺序注册超时,问题是它们是按照其值的顺序计时的,因此值 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
})();
}
})();
关于Javascript 关闭问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2704982/