Javascript 构造函数;创造;JS中的无限循环

Javascript 构造函数;创造;JS中的无限循环,javascript,Javascript,我注意到构造函数中有一些奇怪的行为。这个代码无限循环,我不知道为什么 function thing(){ this.start=function(){console.log(this.msg)}; this.msg=“开始…”; setInterval(()=>{this.start()},1000) } 创造一个新事物之所以这样做,是因为setInterval()设置了一个。。。你猜对了间隔,它将继续以您设置的间隔(本例中为1000ms)执行其内容 setTimeout()将以设置的延迟延迟

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

function thing(){
this.start=function(){console.log(this.msg)};
this.msg=“开始…”;
setInterval(()=>{this.start()},1000)
}

创造一个新事物之所以这样做,是因为
setInterval()
设置了一个。。。你猜对了<代码>间隔
,它将继续以您设置的间隔(本例中为
1000ms
)执行其内容


setTimeout()
将以设置的延迟延迟执行一次。

之所以这样做,是因为
setInterval()
设置了。。。你猜对了<代码>间隔,它将继续以您设置的间隔(本例中为
1000ms
)执行其内容


setTimeout()
将以设置的延迟延迟执行一次。

是否确实要使用
setInterval
而不是
setTimeout
?前者将每隔1秒调用
this.start
,而后者将在1秒后调用一次, 请查看下面解释这两种功能的链接:

  • setInterval

  • setTimeout

  • 正确的代码段应为:

    function thing(){
    this.start=function(){console.log(this.msg)};
    this.msg=“开始…”;
    setTimeout(this.start(),1000)
    }

    创造一个新事物您确定要使用
    setInterval
    而不是
    setTimeout
    ?前者将每隔1秒调用
    this.start
    ,而后者将在1秒后调用一次, 请查看下面解释这两种功能的链接:

  • setInterval

  • setTimeout

  • 正确的代码段应为:

    function thing(){
    this.start=function(){console.log(this.msg)};
    this.msg=“开始…”;
    setTimeout(this.start(),1000)
    }

    创造一个新事物Yes setInterval将在1秒后调用,因此如果要停止,则需要使用clearInterval。

    Yes setInterval将在1秒后调用,因此如果要停止,则需要使用clearInterval。

    来自文档:

    定义和用法

    setInterval()方法以指定的间隔(毫秒)调用函数或计算表达式

    setInterval()方法将继续调用该函数,直到调用clearInterval()或关闭窗口为止

    setInterval()返回的ID值用作clearInterval()方法的参数

    提示:1000毫秒=1秒

    提示:要在指定的毫秒数后只执行一次函数,请使用setTimeout()方法

    因此,您可能需要执行以下操作:

    function thing(){
    this.start=function(){console.log(this.msg)};
    this.msg=“开始…”;
    setTimeout(()=>{this.start()},1000)
    }
    创造一个新事物来自文档:

    定义和用法

    setInterval()方法以指定的间隔(毫秒)调用函数或计算表达式

    setInterval()方法将继续调用该函数,直到调用clearInterval()或关闭窗口为止

    setInterval()返回的ID值用作clearInterval()方法的参数

    提示:1000毫秒=1秒

    提示:要在指定的毫秒数后只执行一次函数,请使用setTimeout()方法

    因此,您可能需要执行以下操作:

    function thing(){
    this.start=function(){console.log(this.msg)};
    this.msg=“开始…”;
    setTimeout(()=>{this.start()},1000)
    }

    创造一个新事物
    setInterval
    实际上应该启动一个间隔(定时循环)

    另外,您正在执行函数而不是绑定它:)常见错误

    onclick="new thing()"
    

    您的代码可以做得更简单:

    const start = () => setTimeout( () => console.log(200), 1000)
    
    <button onclick="start">Start!</button>
    
    const start=()=>setTimeout(()=>console.log(200),1000)
    开始
    

    在大多数情况下,JS中不需要对象。作为一级对象的函数是JS非常强大的功能。

    setInterval
    实际上应该启动一个间隔(定时循环)

    另外,您正在执行函数而不是绑定它:)常见错误

    onclick="new thing()"
    

    您的代码可以做得更简单:

    const start = () => setTimeout( () => console.log(200), 1000)
    
    <button onclick="start">Start!</button>
    
    const start=()=>setTimeout(()=>console.log(200),1000)
    开始
    

    在大多数情况下,JS中不需要对象。作为一级对象的函数是JS非常强大的功能。

    好吧,您正在调用
    setInterval
    ,它将永远循环。这不是你想要的吗?你们都是对的。我没有注意到我的错误。谢谢。我以为我调用
    东西.start()
    时,它进行了某种递归并保持设置间隔。
    start
    不调用
    东西
    ,所以这里不可能发生递归。现在我知道了……好吧,您正在调用
    setInterval
    ,它将永远循环。这不是你想要的吗?你们都是对的。我没有注意到我的错误。谢谢。我当时想的是,当我调用
    东西.start()
    时,它进行了某种递归并不断设置间隔。
    start
    不调用
    东西
    ,所以这里不可能发生递归。现在我知道了……当我看到这个问题时,我实际上在想这个问题,我喜欢这个错误,非常滑稽:)当我看到这个问题时,我实际上在想这个问题,我喜欢这个错误,非常滑稽:)