javascript - JavaScript 中的 setTimeout 函数未按正确的时间间隔输出数字

标签 javascript

我不明白为什么这个函数按预期连续顺序输出 1-5,但间隔为 1 秒,而不是 1、2、3 等秒。我不熟悉 setTimeout 函数,并且我知道这里函数的参数发生了一些我没有看到的情况。

var counter = function() {
   for (var i = 1; i <= 5; i++) {
     (function(x){
       setTimeout(function timer() {
           console.log(x);
       }, (x * 1000));
     })(i);
   }
 };

最佳答案

您可以通过递归调用来避免 for 循环,只需传递开始和停止索引即可。

var counter = function (x, y) {
    setTimeout(function timer() {
        console.log(x);
        if (x != y) counter((x + 1),y);
    }, (x * 1000));
};

counter(1, 5);

<强> Fiddle demo

关于javascript - JavaScript 中的 setTimeout 函数未按正确的时间间隔输出数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31361749/

相关文章:

javascript - 在 WordPress 存档循环中添加 Owl Carousel 而不是帖子缩略图

javascript - AngularJS 服务继承问题

javascript - 在所有屏幕分辨率下以相同尺寸显示的图像

javascript - 使用javascript,一个对象如何从另一个对象派生,而基础对象可以独立调用?

javascript - 仅当文本字段包含文本时才启用按钮

JavaScript - onmouseover 修改前一个元素的 css 高度

Javascript 触摸事件 : distinguishing finger vs. Apple Pencil

javascript - 从动态文本区域获取值

javascript - 找不到 javascript 函数调用的源

javascript - 对扩展 Array 的类的意外构造函数调用