我想clearInterval(),我可以使用clearInterval(myInterval)这样做,但为什么我不能使用clearInterval(this)?
以下是有效的代码:
<div class="fb_pagZ">
<li><a href="site.com/img=2" /></li>
</div>
以下代码不起作用:
var test = setInterval(function(){
request.post({url: myURL, form: {
user : myUser,
pass : myPass
function(err,res,body){
if(res.statusCode === 302) clearInterval(test);
})
}, 1100)
编辑1:我很抱歉这个糟糕的问题。我不太熟悉'this'的概念,直觉上使用'this'我可以clearInterval()。原因是因为当我在第一个代码中的console.log(test)和在setInterval函数内的第二个代码中的console.log(this)中时,输出是相同的,因此是直觉。好吧,我宁愿研究'这个'。感谢大家的回答和评论。非常感谢。
答案 0 :(得分:3)
setInterval()
未在this
的值中提供timerID。你就是不能这样使用它。 timerID仅作为setInterval()
的返回值提供,如第一个示例所示。
您可以创建自己的小型计时器对象,根据需要封装内容,为您存储timerID。
例如,您可以像这样创建自己的计时器对象,它将计时器对象作为this
的值传递给回调。然后,您可以使用this
在对象上调用clearInterval()
方法。
class IntervalTimer() {
start(cb, t) {
// if there was a previous interval going here, stop it
// only one per timer object permitted
this.stop();
this.id = setInterval(() => {
cb.call(this); // set the this value to be our object
}, t);
}
stop() {
if (this.id) {
clearInterval(this.id);
this.id = null;
}
}
}
// usage
let t = new IntervalTimer();
t.start(function() {
// based on some logic, decide to clear the interval
// the value of "this" has been set to the timer object
this.stop();
}, 1000);
答案 1 :(得分:-1)
有问题,在setInterval回调函数中,“this”表示上下文。在函数中,您首先编写与定时器回调函数不同的上下文。上下文很重要,因此使用clearInterval必须将参数作为整数而不是上下文本身传递。