JavaScript中的setTimeout函数不';t以正确的时间间隔输出数字

JavaScript中的setTimeout函数不';t以正确的时间间隔输出数字,javascript,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));

我不明白为什么这个函数按预期的顺序连续输出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);
   }
 };
var计数器=函数(){

对于(var i=1;i,因为您立即将所有调用置于
setTimeout
。因此,在同一事件中,JS接收到调用
计时器的指令:1000毫秒后、2000毫秒后、3000毫秒后、4000毫秒后和5000毫秒后。这正是它所做的,因此每隔1秒调用
计时器


如果您希望逐步增加间隔,则应将循环重写为递归循环,在该循环中,对
setTimeout
的下一次调用由
timer
执行,正如@putvande所说,您将以不同间隔同时设置所有5个超时

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

counter();
var计数器=函数(){

for(var i=1;i可以通过递归调用来避免for循环,只需传递start和stop索引即可

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

counter(1, 5);

这是因为所有5个
setTimeout
都是在同一时间触发的,但延迟不同。因此,因为它们等待1-5秒,它们会在一秒之后发生。所有答案都很好,我知道前面的答案直接回答了问题,但我很欣赏这个演示.