取消后角度间隔清晰

时间:2015-04-17 13:02:14

标签: angularjs

我有这段代码开始调用间隔:

// Start timer function
var startTimer = function () {

    // Apply our first image
    applyImage(element);

    console.log('about to start the timer');
    console.log(timer);

    // If our timer is not running
    if (!timer) {

        console.log('start timer');

        // Start our timer
        timer = $interval(changeImage, 10000);
    }
};

我在做的一件事就是检查计时器是否为null / undefined。 但是我注意到当我调用我的停止功能时:

var stopTimer = function () {

    console.log('about to stop the timer')

    // If we have started our timer
    if (timer) {

        console.log('stop timer');

        // Stop it
        $interval.cancel(timer);
    }
};

它实际上并未清除计时器,只是将状态设置为“取消”'。 在我调用 $ interval.cancel(计时器)后,我可以将计时器设置为空吗? 或者我应该将我的开始功能更改为:

// Start timer function
var startTimer = function () {

    // Apply our first image
    applyImage(element);

    console.log('about to start the timer');
    console.log(timer);

    // If our timer is not running
    if (!timer || timer.$$state.status === 2) {

        console.log('start timer');

        // Start our timer
        timer = $interval(changeImage, 10000);
    }
};

1 个答案:

答案 0 :(得分:0)

您可以在此时将计时器设置为null ...或者您可以删除它。取消调用无法从调用者的作用域中删除var - JavaScript没有执行此操作的机制。将其标记为已取消也可让您控制接下来发生的事情,例如,如果您运行了六个间隔并且由于某种原因需要跟踪其状态。

请注意,删除和设置为null之间存在差异。 Null在JavaScript中是一个完全合法的值,因此将var设置为null实际上并不表示它“不再需要”某些人期望的方式。引用的对象可以被释放(如果这是对它的最后一次引用),但var本身仍然存在于范围内。