为什么clearInterval在我的脚本中不起作用?

时间:2019-04-14 16:54:08

标签: javascript closures

我的clearInterval方法有问题。 我在FrontendMasters上深入了解了JS,并且有一个练习,您需要使用setInterval并每秒记录一个字符串,然后在5秒钟后运行clearInterval。我可以使用正确的解决方案,但是我想知道为什么我的解决方案无法有效地理解。 console.log('clear called', func);将在5秒钟后运行,并记录clear called字符串和函数主体。我尝试使用setTimeout来包装wrapper.stop(),但它也不以这种方式工作。我已经使用闭包来尝试解决该练习。这是我的脚本。

function sayHowdy() {
 console.log('Howdy');
}


function everyXsecsForYsecs(func, interval, totalTime) {
 function clear() {
   console.log('clear called', func);
   clearInterval(func);
 }
 return {
   start() {
     setInterval(func, interval);
   },
   stop() {
     setTimeout(clear, totalTime);
   }
 }
}


const wrapper = everyXsecsForYsecs(sayHowdy, 1000, 5000);
wrapper.start();
wrapper.stop();

谢谢

1 个答案:

答案 0 :(得分:2)

clearInterval不带函数,而是一个 timer id ,使用setInterval时会返回它(以便您可以将多个定时器设置到同一个函数,并取消它们个别地)。要使用它,请在everyXsecsForYsecs

中声明一个局部变量
  var timer;

然后为其分配计时器:

 timer = setInterval(func, interval);

然后您可以clearInterval(timer)