Javascript setInterval clearInterval Simple Example Not Working Explained?

前端 未结 3 774
星月不相逢
星月不相逢 2020-12-20 00:41

I have a very simple JS setInterval and clearInterval example that doesn\'t work. There has got to be an underlying reason why it does not work and I would like to know why

相关标签:
3条回答
  • 2020-12-20 00:47
    var automessage;
    
    function turnON() { //executed by onclick event A 
        automessage = setInterval(function(){ something() }, 2000);
    }
    function turnOff() { //executed by onclick event B
        clearInterval(automessage);
    }
    function something() {
        //pulls instant messages
    }
    

    This code should work. Yours isn't working because in the context of the turnON function you are always initializing a new variable called automessage, which obfuscates the global one. By not using var you will be overriding the automessage global variable.

    automessage is a global variable, so it is editable from any other script. Since, IMHO, it shouldn't be possible, I'd recommend you to use a closure to encapsulate and make private the automessage variable(something like a modular pattern should help you, see below).

    var buttonModule = (function() {
        var _automessage;
        function turnON() { //executed by onclick event A 
            _automessage = setInterval(_something, 2000);
        }
        function turnOFF() { //executed by onclick event B
            clearInterval(_automessage);
        }
        function _something() {
            //pulls instant messages
        }
        return {
            turnON: turnON,
            turnOFF: turnOFF
        };
    })();
    

    Then you can use it this way: buttonModule.turnON, buttonModule.turnOFF inside your click handlers.

    0 讨论(0)
  • 2020-12-20 00:51

    change

    var automessage = setInterval(function(){ something() }, 2000);
    

    to

    automessage = setInterval(function(){ something() }, 2000);
    

    in turnON()

    0 讨论(0)
  • 2020-12-20 00:56

    automessage is declared twice - as a global variable and as a local variable. try:

    function turnON() //executed by onclick event A
    {
        automessage = setInterval(function(){ something() }, 2000);
    }
    
    0 讨论(0)
提交回复
热议问题