2016-08-11 34 views
1

ここでは、可変タイマーはtimerIncrement関数の外で宣言されています。可変スコープのため、関数内の値を変更することは外に変更しないことがわかっています。しかし、私は本当にこのようなものを考え出す必要があります。そうなると、idleTime > 5は新しいタイマーを使用します。変数値をトップレベル変数に反映する関数内で変数値を更新する方法

どうすればこの問題を解決できますか? setIntervalへの最初の呼び出しが行われたときに間隔が設定されているので

jQuery(document).ready(function($) { 

    var timer = 1000; 
    // //increment the idle time counter every sec. 
    var idleInterval = setInterval(timerIncrement, timer); // 1 sec 


    function timerIncrement() { 
     while(idleTime < 5){ 
     console.log('test '+idleTime); 
     idleTime = idleTime + 1; 
     } 
     timer = 2000;//how to make this take affect on the top so that setInterval run at this newly set timer 
     console.log('reached max'); 

    } 

} 

答えて

1

delayの値を変更しても効果はありません。

このシナリオではsetTimeoutを使用してください。

$(document).ready(function() { 
    var timer = 1000; 
    var idleInterval = setTimeout(timerIncrement, timer); // 1 sec 

    function timerIncrement() { 
     timer = 2000 
     //Recursively call your method 
     idleInterval = setTimeout(timerIncrement, timer); 
    } 
}); 
2

これは動作するはずです:

function timerIncrement() { 
     while(idleTime < 5){ 
     console.log('test '+idleTime); 
     idleTime = idleTime + 1; 
     } 
     timer = 2000;//how to make this take affect on the top so that setInterval run at this newly set timer 
     clearInterval(idleInterval); 
     idleInterval = setInterval(timerIncrement, timer); 
     console.log('reached max'); 

    } 
関連する問題