2015-04-17 39 views
0

我有这段代码,开始调用的时间间隔:间隔角清晰后取消

// 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); 
    } 
}; 

有一件事我做的有检查,看看是否计时器以外的任何其他空/未定义。 但我注意到,当我打电话给我的停止功能:

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); 
    } 
}; 
+0

它不会以这种或那种方式改变很多。这是开发人员的偏好,希望在哪里更改代码。就个人而言,我会在取消定时器之后将'timer'设置为undefined,因为它可以更轻松地阅读和理解您在'startTimer()'函数中执行的操作。 –

回答

0

你绝对可以在该点设置定时器空...或者你可以将其删除。取消调用不能从调用者的作用域中删除var - JavaScript没有这样的机制。标记取消也可以让你控制接下来发生的事情,比如你是否运行了六次间隔,并且出于某种原因需要跟踪他们的状态。

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

+0

好吧,我可以做$ interval.cancel(timer); timer = null;是吗? – r3plica

+0

是的,如果你这样做,你可以简化你的if()语句来检查定时器是否被设置,我猜你正在尝试做什么! –