Javascript:setTimeout在匿名函数表达式上的使用
我最近开始学习javascript来帮助维护一些东西,今天遇到了这个问题:Javascript:setTimeout在匿名函数表达式上的使用,javascript,settimeout,Javascript,Settimeout,我最近开始学习javascript来帮助维护一些东西,今天遇到了这个问题: this.moveChar = function(){ // body here setTimeout(moveChar,1000); } this.initialise= function(){ this.moveChar(); } 调用initialise时,我希望调用moveChar,然后每1000毫秒重复调用一次 然而,实际发生的是调用moveChar一次,就这样。根据我读到的其他
this.moveChar = function(){
// body here
setTimeout(moveChar,1000);
}
this.initialise= function(){
this.moveChar();
}
调用initialise时,我希望调用moveChar,然后每1000毫秒重复调用一次
然而,实际发生的是调用moveChar一次,就这样。根据我读到的其他stackoverflow帖子,我怀疑这可能与被表达的函数有关,而不是声明的函数。我试着用
this.moveChar = function recMove(){
// body here
setTimeout(recMove,1000);
}
也没有运气
关于如何解决这个问题有什么建议吗
编辑:我需要做的主要事情是每秒调用一次moveChar函数。如果有比setTimeout递归更好的方法,我愿意接受它您是否在
侧体
中使用此
如果是这样,您应该在调用时绑定正确的上下文
this.moveChar = function(){
// body here
setTimeout(this.moveChar.bind(this), 1000);
}
或使用匿名功能:
this.moveChar = function(){
// body here
var that = this;
setTimeout(function(){
that.moveChar();
}, 1000);
}
this.moveChar = function(){
// body here
setTimeout(() => this.moveChar(), 1000);
}
或箭头功能:
this.moveChar = function(){
// body here
var that = this;
setTimeout(function(){
that.moveChar();
}, 1000);
}
this.moveChar = function(){
// body here
setTimeout(() => this.moveChar(), 1000);
}
同样的注释适用于setInterval
变量:
this.initialise= function(){
setInterval(this.moveChar.bind(this), 1000);
// var that = this;
// setInterval(function(){that.moveChar();}, 1000);
// setInterval(() => this.moveChar(), 1000);
}
您是否在
侧车身中使用此
如果是这样,您应该在调用时绑定正确的上下文
this.moveChar = function(){
// body here
setTimeout(this.moveChar.bind(this), 1000);
}
或使用匿名功能:
this.moveChar = function(){
// body here
var that = this;
setTimeout(function(){
that.moveChar();
}, 1000);
}
this.moveChar = function(){
// body here
setTimeout(() => this.moveChar(), 1000);
}
或箭头功能:
this.moveChar = function(){
// body here
var that = this;
setTimeout(function(){
that.moveChar();
}, 1000);
}
this.moveChar = function(){
// body here
setTimeout(() => this.moveChar(), 1000);
}
同样的注释适用于setInterval
变量:
this.initialise= function(){
setInterval(this.moveChar.bind(this), 1000);
// var that = this;
// setInterval(function(){that.moveChar();}, 1000);
// setInterval(() => this.moveChar(), 1000);
}
您可能需要考虑使用<代码> SETIN()/<代码>,这是这个任务的更合适的API。
setInterval()
所做的是-当达到某个间隔时,它将重复调用给定的函数
见:
引用:
重复调用函数或执行代码段,使用固定的
每次呼叫之间的时间延迟。返回一个有效期
示例:
假设moveChar()
包含您的操作逻辑。然后重复一遍,你要做这一行
let moveChar = function(){
// Do stuff
console.log("Hi thanks for calling me!");
}
setInterval(moveChar, 1000);
您可能需要考虑使用<代码> SETIN()/<代码>,这是这个任务的更合适的API。
setInterval()
所做的是-当达到某个间隔时,它将重复调用给定的函数
见:
引用:
重复调用函数或执行代码段,使用固定的
每次呼叫之间的时间延迟。返回一个有效期
示例:
假设moveChar()
包含您的操作逻辑。然后重复一遍,你要做这一行
let moveChar = function(){
// Do stuff
console.log("Hi thanks for calling me!");
}
setInterval(moveChar, 1000);
this.moveChar
与moveChar
不同,除非this
是类似于窗口的全局范围对象
this.moveChar
是对象的属性,而moveChar
将引用可见范围链中的任何变量
您可以将其更改为几项内容,以保持所使用对象的范围:
使用
使用
this.moveChar
与moveChar
不同,除非this
是类似于窗口的全局范围对象
this.moveChar
是对象的属性,而moveChar
将引用可见范围链中的任何变量
您可以将其更改为几项内容,以保持所使用对象的范围:
使用
使用
您是否在侧边正文中使用此
?如果是这样,您应该在调用时绑定正确的上下文。首先,如果您希望在每个特定延迟后运行函数,请使用setInterval
。第二,当您执行setTimeout(moveChar,1000)时
,JS将查找名为moveChar
的变量,但找不到任何内容moveChar
是对象的一部分,必须作为object.moveChar
进行访问,在您的例子中this.moveChar
。现在,由于是递归循环,因此必须再次绑定此
。因此,您的代码变为setTimeout(this.moveChar.bind(this),1000)
yes函数moveChar使用this.VARIABLENAME引用一些全局变量,如果这是您的意思?你能详细说明绑定到上下文部分吗?@Rajesh,setInterval
完全是另一个特性。使用tailsetTimeout
您永远不会同时接到两个电话。@Rajesh非常感谢您将其完全修复。我之前尝试过setInterval,但它不起作用,可能是因为我没有正确绑定它。您是否在这里的正文中使用此
?如果是这样,您应该在调用时绑定正确的上下文。首先,如果您希望在每个特定延迟后运行函数,请使用setInterval
。第二,当您执行setTimeout(moveChar,1000)时
,JS将查找名为moveChar
的变量,但找不到任何内容moveChar
是对象的一部分,必须作为object.moveChar
进行访问,在您的例子中this.moveChar
。现在,由于是递归循环,因此必须再次绑定此
。因此,您的代码变为setTimeout(this.moveChar.bind(this),1000)
yes函数moveChar使用this.VARIABLENAME引用一些全局变量,如果这是您的意思?你能详细说明绑定到上下文部分吗?@Rajesh,setInterval
完全是另一个特性。使用tailsetTimeout
您永远不会同时接到两个电话。@Rajesh非常感谢您将其完全修复。我早些时候尝试过setInterval,但它不起作用,可能是因为我没有正确绑定它。他需要重复执行,setInterval
这里需要。此setTimeout
重复执行。为什么要在这里使用setInterval
呢?查看此页面上的第二个提示,查看在同一页面上使用计时事件创建的时钟有区别:setInterval
不要等待以前的调用,这样它可能会垃圾邮件调用。他需要重复执行,这里需要使用setInterval
。此setT