setTimeout回调获取“随机数”作为参数?

时间:2011-03-22 19:22:51

标签: javascript settimeout

今天,我正在使用setTimeout()进行循环。不幸的是,一些函数参数变得很奇怪。

简而言之,这就是发生的事情:

var x = 1;
var steps = 3;
var timer = false;

function myFunc( y ){
   if( !isNaN(y)&&parseInt(y)==y&&y>0 ) { // if y is int and greater than 0
     x = y;
   } else { // y is no int or is below 0
     if( x >= steps ) { // x is greater than or equal to steps, return to first step
      x = 1
     } else { // x is less than steps, add 1
      x++;
     }
   }

   window.clearTimeout( timer );

   timer = setTimeout( myFunc, 1000 );
}

现在,不知何故,Firefox先生在触发计时器时随机抛出一个int,远远大于“步”到“y”参数......为什么会这样做?

我通过简单的方法解决了这个问题:

timer = setTimeout( function(){ myFunc( -1 ) }, 1000 );

但仍然......为什么浏览器会在“y”参数中给出随机数?

任何?

3 个答案:

答案 0 :(得分:5)

Firefox会以函数执行时间“迟到”的毫秒数调用该函数。

答案 1 :(得分:1)

作为protip,您也可以使用setInterval来实现相同的基本功能:

var x = 1;
var steps = 3;
var timer = false;

function myFunc( y ){
    if (parseFloat(y) == parseInt(y) && !isNaN(y) && y > 0) {
        x = y;
    } else if (x >= steps) {
        x = 1;
    } else {
        x++;
    }
}


timer = window.setInterval(function() { 
    myFunc(1); 
}, 1000);

答案 2 :(得分:1)

  

注意:Gecko传递了一个额外的参数   到回调例程,指示   超时的“迟到”   毫秒。

来源:https://developer.mozilla.org/en/DOM/window.setTimeout#Syntax

无限循环?

var x = 0,
steps = 3,
timer = false;

(function myFunc(y)
{
    x = y % steps;

    timer = setTimeout(myFunc, 1000, ++x);
})(0);