我最近开始学习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.moveChar
与moveChar
不同,除非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);
}