有人可以帮我纠正与 setInterval
相关的问题吗?我对 JavaScript 还很陌生,我不确定这里出了什么问题。我的页面中有这个 block :
GlobalTicker.prototype.TickElements = function () {
this.timer = setInterval(this.initializeElement.apply(this) , 1000);
};
GlobalTicker.prototype.initializeElement = function () {
for (var i = 0; i < this.tickerElements.length; i++) {
var existingRun = this.tickerElements[i].secs;
var elementId = $('#' + this.tickerElements[i].id + ' .comment-editor').find('.ticker');
existingRun -= 1;
$(elementId).text(existingRun);
if (existingRun === 0) {
$(elementId).remove();
this.tickerElements.splice(i, 1);
if (this.tickerElements.length == 0) clearInterval(this.tickerElements.timer);
}
}
};
然后在代码中的某个地方,我在函数中进行了此调用
var objTicker = new GlobalTicker();
CommentManagement.prototype.createComment = function (domObject) {
objTicker.TickElements();
};
这个函数调用实际上调用了setInterval
函数并运行第一次迭代并跳转到initialiseComment();
但是一旦执行了这个 block ,在下一个时间间隔,它不会再次执行 initialiseComment();
,而是跳回到我的函数调用 CreateComment();
。我在这里做错了什么?
最佳答案
setInterval()
需要函数引用。您正在调用函数本身,并将执行函数的返回结果(未定义
)传递给 setInterval()
。由于该返回值不是函数,因此没有可供 setInterval()
调用的回调函数。因此,您的方法在您第一次调用时执行了一次,但在间隔时间内无法调用。
要修复它,您应该对此进行更改:
this.timer = setInterval(this.initializeElement.apply(this) , 1000);
对此:
var self = this;
this.timer = setInterval(function() {self.initializeElement()}, 1000);
请注意,setInterval()
回调中 this
的值也将与您想要的值不同,因此您想要的值会保存在 中self
因此可以从中引用它。在这种情况下,也无需使用 .apply()
,因为调用对象上的方法会根据需要自动设置 this
指针。
关于javascript - setInterval 在第一次迭代后退出。请帮我纠正这个片段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15711563/