如果setInterval在函数内部,为什么clearInterval不起作用?

时间:2017-03-09 07:45:14

标签: javascript jquery

function consoleTest() {
    setInterval(function(){
     console.log('Hello World');
    }, 1000);
}

$('#button').on('click', function(){
    clearInterval(consoleTest);
});

consoleTest();

当我点击按钮时,我创建了一个简单的应用程序,它将停止/暂停间隔。我知道如何使它工作我只需要在函数外部声明一个变量并包含setInterval,现在我很困惑为什么clearInterval如果我通过函数调用它就会工作,有人请向我解释一下

2 个答案:

答案 0 :(得分:6)

这是setIntervalcleaInterval的正确用法。 setInterval返回一个值,您需要将该值保存在两个函数的作用域中。如果要清除间隔,请使用clearInterval并将变量作为参数传递给它:

var interval;

function consoleTest() {
    interval = setInterval(function() {
        console.log('Hello World');
    }, 1000);
}

$('#button').on('click', function() {
    clearInterval(interval);
});

consoleTest();

如需进一步阅读:clearIntervalsetInterval

答案 1 :(得分:2)

这里有两个问题。首先,您不要在任何地方从setInterval()设置返回的计时器ID。 consoleTest是包装计时器的函数,而不是对计时器的引用,这应该给clearInterval()。其次,您需要将定时器引用放在两个函数的范围内。考虑到这一点,试试这个:

function consoleTest() {
  return setInterval(function(){
    console.log('Hello World');
  }, 1000);
}

$('#button').on('click', function(){
  clearInterval(interval);
});

var interval = consoleTest();
相关问题