今天,我正在使用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”参数中给出随机数?
任何?
答案 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);