2017-06-06 84 views
1

由於某種原因,變量counter不會改變,它保持其初始值爲50.它是一個全局變量,它試圖在由setInterval()調用的函數內部進行更改。Javascript變量內部不會改變setInterval()函數?

var mode = false; 
var counter = 50; 
var interval = null; 
var increment = false; 
var MAX = 50; 
var MIN = 0; 
var INTERVAL_MS = 3000; 

setInterval(doInterval, INTERVAL_MS); 

function doInterval() { 
    if(increment) 
    { 
     counter += 1; 
    } 
    else 
    { 
     console.log("Decrement, " + counter); 
     counter -= 1; 
    } 

    // Set direction 
    if(counter = MIN) 
    { 
     increment = true; 
    } 
    else if(counter = MAX) 
    { 
     increment = false; 
    } 

    console.log("set to " + counter + " (D) Increment next time? " + increment); 

    // dosomething with the values 
} 

從該代碼

遞減的輸出,50

集到50(d)遞增下一次?假

遞減,50

設爲50(D)下次增加嗎?假

遞減,50

設爲50(D)下次增加嗎?假

等等

因爲它是50和增量是假的,它應該成爲49,48,但似乎我不能改變變量的值。什麼可能是一個原因?該代碼在NodeJS應用程序中運行。

回答

4

這些線

if(counter = MIN) 

else if(counter = MAX) 

被設定計數器至最小或最大。你想===三重等於(==罰款在這種情況下)檢查是否相等。

+0

啊這樣的一個新手錯誤..有一段時間看到它,因爲我在終端編程..這固定它當然! –

0

您在if語句中意外地分配了值。試試這個來解決它。

在這部分

if(counter == MIN) 
    { 
    increment = true; 
    } 
    else if(counter == MAX) 
    { 
    increment = false; 
    } 

要解決它,你可以使用這個:

var mode = false; 
var counter = 50; 
var interval = null; 
var increment = false; 
var MAX = 50; 
var MIN = 0; 
var INTERVAL_MS = 3000; 

setInterval(doInterval, INTERVAL_MS); 

function doInterval() { 
    if(increment) 
    { 
    counter += 1; 
    } 
    else 
    { 
    console.log("Decrement, " + counter); 
    counter -= 1; 
    } 

    // Set direction 
    if(counter == MIN) 
    { 
    increment = true; 
    } 
    else if(counter == MAX) 
    { 
    increment = false; 
    } 

    console.log("set to " + counter + " (D) Increment next time? " + increment); 

    // dosomething with the values 
} 
1

=是分配和==是平等檢查(===嚴格檢查)。請使用平等檢查來修復您的代碼。

// Set direction 
    if(counter == MIN) 
    { 
     increment = true; 
    } 
    else if(counter == MAX) 
    { 
     increment = false; 
    } 
+0

嗨,請添加一些關於爲什麼這個作品的評論。 – stef

+0

@stef編輯答案,謝謝! – Basu