我注意到构造函数中有些奇怪的行为。这段代码无限循环,我不知道为什么。



function thing(){
    this.start=function (){console.log(this.msg)};
    this.msg="Starting...";
    setInterval(() => {this.start()},1000)
}

<button onclick="new thing()">Create a new thing!</button>





我已经搜索过此内容,但没有发现任何能解释这一点的内容。请有人帮助我并回答为什么会这样。

谢谢。

最佳答案

您确定要使用setInterval而不是setTimeout吗?前者将每1秒调用一次this.start,而后者将在1秒后调用一次,
请查看以下说明这两个功能的链接:


setInterval
https://developer.mozilla.org/pl/docs/Web/API/Window/setInterval
setTimeout
https://developer.mozilla.org/pl/docs/Web/API/Window/setTimeout


正确的代码段应为:



function thing(){
    this.start=function (){console.log(this.msg)};
    this.msg="Starting...";
    setTimeout(this.start(), 1000)
}

<button onclick="new thing()">Create a new thing!</button>

关于javascript - 构造函数在JS中“创建”无限循环,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49650481/

10-11 05:48