2016-12-23 124 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">

希望它可以幫助

清除間隔