Javascript 关闭问题

标签 javascript closures

为什么下面的代码打印“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/

相关文章:

gradle - 如何将任务扩展对象传递给 Gradle 中的闭包?

javascript - Chrome devtools 控制台不显示关闭

javascript - 在 onerror 属性中使用闭包似乎不起作用

swift - 当 Swift 中仍在执行某个任务时删除闭包的引用

javascript - 为什么没有添加准备好的div?

javascript - Angularjs Modal + 自动完成输入(附有 Plunker)

javascript - 通过 ViewerJS 获取 PDF 中的页数

javascript - 相同的 JS 闭环问题 - 但 SO 的答案不起作用

javascript - 如何在输入区域添加 onclick jquery 函数

javascript - 如何获取 iframe 的来源?