我最近开始学习JavaScript,以帮助维护某些内容,并在今天遇到了此问题:

this.moveChar = function(){
    // body here
    setTimeout(moveChar,1000);
}

this.initialise= function(){
    this.moveChar();
}


调用初始化时,我希望可以调用moveChar,然后每1000ms重复调用一次

但是,实际上发生的是moveChar被调用一次,仅此而已。根据我阅读的其他stackoverflow帖子,我怀疑这可能与函数的表达而不是声明有关。我尝试使用

this.moveChar = function recMove(){
    // body here
    setTimeout(recMove,1000);
}


也没有运气。

关于如何解决此问题的任何建议?

编辑:我要做的主要事情是每秒调用一次moveChar函数。如果有比setTimeout递归更好的方法,我可以接受

最佳答案

this.moveCharmoveChar不同,除非this是像window这样的全局作用域对象。

this.moveChar是对象的属性,而moveChar将引用可见范围链中的任何变量。

您可以将其更改为几件事,以保持所使用的任何对象的范围:

使用arrow function

this.moveChar = function(){
    // body here
    setTimeout(()=>this.moveChar(),1000);
}


使用.bind()

this.moveChar = function(){
    // body here
    setTimeout(this.moveChar.bind(this),1000);
}

10-01 23:03