2016-12-23 126 views
-6

我正在编写脚本,并且有两个非常相似但给出不同结果的布尔语句,我不明白他们为什么会相互冲突。布尔语句不在javascript中评估

我的功能看起来是这样的:

SCRIPT:

(function() { 
    window.onload = function() { 
     let stopped = true; 
     let button = document.getElementById("start-stop"); 

     if (stopped) { 
      setInterval(function() { 
       console.log("The timer is working."); 
      }, 1000); 
     } 

     button.addEventListener('click', function(){ 
      if (stopped) { 
       stopped = false; 
       console.log(stopped); 
      } else { 
       stopped = true; 
       console.log(stopped); 
      } 
     }); 
    } 
} 
}).call(this); 

的基本思想是,当我按下按钮的setInterval功能停止,但它一直在持续,即使if/else功能开关停止到false

例如,我的console.log看起来是这样的:

console log when my function is run.

stopped = false,但setInterval不终止。

为什么这不正确评估?

+7

“停止”变为false不会停止'setInterval'。为此,你必须使用'clearInterval'。 –

回答

2

您的代码存在的问题是您正在尝试处理一段已经开始运行的代码。简而言之,无论停止变量的值是什么,setInterval方法都会每隔1000ms调用一次。如果你想真正停止日志,你可以做这些:

clearInterval() 

完全删除的时间间隔或

 setInterval(function() { 
      if (stopped) { 
      console.log("The timer is working."); 
      } 
     }, 1000); 

,以检查是否停止变量的值有变化(后点击)并相应地采取行动。选择这两种这些你的目的..

0

if(stopped)声明setInterval函数内,因为如果你使用了此功能,一旦将继续下去..

另一种方式来阻止setInterval功能是通过使用clearInterval,像这

var intervalId = setInterval(function() { /* code here */}, 1000) 
// And whenever you want to stop it 
clearInterval(intervalId); 
+0

同类问题。 –

0

当您单击该按钮停止变量为假,但的setInterval不会停止,因为已执行的setInterval代码..它不会再次点击按钮执行。如果你重新加载页面会发生什么是停止变量将再次设置为true,因为你已经写在第一行,并且setInterval将再次执行..

现在你可以做的是将setInterval存储在这样的变量中

var timer = setInterval(function,1000); 

,然后当你点击按钮使用此方法来清除间隔

clearInterval(timer); 

这应该做的伎俩..希望它有助于..

2

即使在单击按钮之前,您也正在调用setinterval。由于该事件已经触发你不能用变量设置为false只是停止,则需要使用clearinterval

检查下面的代码片段

var intervalId; 
 
window.onload = function() { 
 
    let stopped = true; 
 
    let button = document.getElementById("start-stop"); 
 
    var Interval_id; 
 
    button.addEventListener('click', function() { 
 
    if (stopped) { 
 
     Interval_id = callTimeout(); 
 

 
     stopped = false; 
 

 
    } else { 
 

 
     clearInterval(Interval_id); 
 
     stopped = true; 
 
    } 
 
    }); 
 
} 
 

 
function callTimeout() { 
 
    intervalId = setInterval(function() { 
 
    console.log("The timer is working."); 
 
    }, 1000); 
 
    return intervalId; 
 
}
<input type="button" id="start-stop" value="click it">

希望它可以帮助

清除间隔