有没有办法检查var是否正在使用setInterval()?

cha*_*ley 48 javascript

例如,我设置的间隔就像

timer = setInterval(fncName, 1000);
Run Code Online (Sandbox Code Playgroud)

如果我去做

clearInterval(timer);
Run Code Online (Sandbox Code Playgroud)

它确实清除了间隔,但有没有办法检查它是否清除了间隔?我已经尝试在它有间隔的时候得到它的值,当它没有时,但它们似乎都只是数字.

Cas*_*Chu 112

没有直接的方法来做你想要的.相反,timer每次调用时都可以设置为false clearInterval:

// Start timer
var timer = setInterval(fncName, 1000);

// End timer
clearInterval(timer);
timer = false;
Run Code Online (Sandbox Code Playgroud)

现在,timer要么是假的,要么在给定时间有值,所以你可以简单地检查一下

if (timer)
    ...
Run Code Online (Sandbox Code Playgroud)

如果要将其封装在类中:

function Interval(fn, time) {
    var timer = false;
    this.start = function () {
        if (!this.isRunning())
            timer = setInterval(fn, time);
    };
    this.stop = function () {
        clearInterval(timer);
        timer = false;
    };
    this.isRunning = function () {
        return timer !== false;
    };
}

var i = new Interval(fncName, 1000);
i.start();

if (i.isRunning())
    // ...

i.stop();
Run Code Online (Sandbox Code Playgroud)

  • 使用`if(timer!== false)`来避免数字问题.(数等号) (3认同)
  • @baptx:嗯,是的,你正在看待你需要检查计时器是否是布尔值假的事情(如Casey Chu所说).这与检查它是否不是布尔值true((timer === false)!=(timer!== true)`不同.我改变了你的代码:http://jsfiddle.net/RHeZN/12/现在它更安全了. (2认同)

bob*_*nce 6

来自setTimeout和的返回值setInterval是完全不透明的值.你无法从中得出任何意义; 他们唯一的用途就是回到clearTimeoutclearInterval.

没有功能可以测试一个值是否对应于活动超时/间隔,对不起!如果你想要一个可以检查其状态的计时器,你必须创建自己的包装函数,记住设置/清除状态.