Javascript setInterval只运行一次

Ita*_*dev 1 html javascript methods dynamic setinterval

setInterval(this.Animate(), this.speed);
Run Code Online (Sandbox Code Playgroud)

预计每隔这个时间运行一次.是的,但浏览器只运行一次.可能的原因是什么?

pim*_*vdb 7

如果Animate是原型的派生函数,则必须使用:

setInterval(this.Animate.bind(this), this.speed);
Run Code Online (Sandbox Code Playgroud)

  • +1 很有可能需要保留当前的“this”作为调用上下文。 (2认同)

Lio*_*ior 6

尝试在没有括号的情况下运行你的函数,当你放括号时它总是调用函数而不是传递它,这就是你想要的:

setInterval(this.Animate, this.speed);
Run Code Online (Sandbox Code Playgroud)

如果它仍然不起作用,你应该调试并找出'this'的范围是什么,因为'this'可能会改变.您可以通过在浏览器的JS调试器中添加断点来实现.此外,您可以尝试这样做以避免'apply'的范围问题

var animate = this.animate.apply(this)
setInterval(animate, this.speed);
Run Code Online (Sandbox Code Playgroud)

ps:为动画避免使用setInterval可能是一个不错的选择,因为它们可能会排队然后立即触发.而是在函数末尾(this.Animate)一次又一次地调用setTimedout,以创建一个循环.


xan*_*ded 5

请执行下列操作:

setInterval(this.Animate, this.speed);
Run Code Online (Sandbox Code Playgroud)

您正在执行该函数,而不是指定要以特定间隔执行的函数的引用...