与JavaScript setInterval相关的问题

与JavaScript setInterval相关的问题,javascript,setinterval,Javascript,Setinterval,我有两个问题与JavaScript的setInterval()方法有关。 我还没有发现任何与这些问题相关的实际案例(但我想这也不是不可能的),但出于好奇,我想问这些问题 1.)如果要由setInterval()执行的代码比提供的时间间隔花费更多的时间,会发生什么情况?前一次执行是否停止,当前执行是否开始执行,或者两者并行运行 2.)当调用setInterval()时,如果整个系统(OS)在时间间隔之间挂起怎么办?在这种情况下,代码是否可能以不同的间隔执行?我的意思是setInterval()是否

我有两个问题与JavaScript的
setInterval()
方法有关。 我还没有发现任何与这些问题相关的实际案例(但我想这也不是不可能的),但出于好奇,我想问这些问题

1.)如果要由
setInterval()
执行的代码比提供的时间间隔花费更多的时间,会发生什么情况?前一次执行是否停止,当前执行是否开始执行,或者两者并行运行

2.)当调用
setInterval()
时,如果整个系统(OS)在时间间隔之间挂起怎么办?在这种情况下,代码是否可能以不同的间隔执行?我的意思是
setInterval()
是否保证只在指定的时间间隔执行代码? 谢谢

  • JavaScript使用单线程执行。像
    setTimeout
    setInterval
    这样的函数让很多人相信在JavaScript中多线程是可能的。实际上,
    setInterval
    setTimeout
    只是安排一个函数或表达式在指定的时间执行,这些函数被添加到同一个单线程堆栈中。如果浏览器在“<代码> > StimeTime/<代码>或<代码> SETTIMEATE >被调度的情况下处理某件事,则该计划的功能将在浏览器到达后立即执行。

  • setInterval
    不保证函数仅在指定的时间间隔执行
    setInterval
    将尝试在指定的时间执行函数,但任何数量的操作都可能延迟执行或阻止它完全执行

  • 引用约翰·雷辛的话:

    如果计时器被阻止立即执行,它将被延迟到下一个可能的执行点(比所需的延迟更长)

    如果间隔需要足够长的时间来执行(比指定的延迟时间长),则间隔可以背靠背执行而没有延迟


    好的,我明白了。但是单线程执行意味着什么。这是否意味着对于页面中的所有脚本,只有一个线程,浏览器中的每个选项卡都只有一个线程。@DigvijayYadav:不,它只是定义JavaScript的行为。引擎实际使用的线程数量取决于实现。虽然Chrome在自己的进程中运行每个选项卡,但Opera是一个单进程应用程序。@DigvijayYadav Bergi是正确的。出于开发目的,只需了解对于单个页面/选项卡,JavaScript将仅在单个线程中执行。如果您有一个JavaScript函数运行了很长时间,那么它将阻止其他函数运行,直到它返回。好的,谢谢您的解释。