当前位置: 首页 > 面试题库 >

JavaScript setTimeout或setInterval?

白嘉石
2023-03-14
问题内容

据我所知,这两段JavaScript的行为方式相同:

选项A:

function myTimeoutFunction()
{
    doStuff();
    setTimeout(myTimeoutFunction, 1000);
}

myTimeoutFunction();

选项B:

function myTimeoutFunction()
{
    doStuff();
}

myTimeoutFunction();
setInterval(myTimeoutFunction, 1000);

使用setTimeout和setInterval之间有什么区别?


问题答案:

他们本质上试图做同样的事情,但是这种setInterval方法比该setTimeout方法更加准确,因为要setTimeout等待1000ms,然后运行该函数,然后设置另一个超时。因此,等待时间实际上超过了1000毫秒(如果函数执行时间较长,则等待时间会更长)。

尽管有人可能会认为setInterval将执行完全相同每1000毫秒,这是需要注意的重要setInterval也将推迟,因为JavaScript是不是多线程的语言,这意味着-如果有运行脚本的其他部分-区间将有等待完成。

在此Fiddle中,你可以清楚地看到超时将落在后面,而间隔几乎总是以近1个呼叫/秒的速度(脚本正在尝试执行)。如果将顶部的速度变量更改为类似20的小值(这意味着它将尝试每秒运行50次),则该间隔将永远不会达到平均每秒50次迭代。

延迟几乎总是可以忽略不计,但是如果你要编写非常精确的内容,则应该使用自调整计时器(本质上是基于超时的计时器,它会根据所创建的延迟不断进行自我调整)



 类似资料:
  • 问题内容: 定义简单单击JButton的行为时,哪种方法正确?而且,有什么区别? 要么 问题答案: 是Swing中的低级事件侦听器(顺便说一下,也是AWT)。 是更高级别的,应该使用。 比起更好的选择,应该使用(实际上是)。 使用允许在多个小部件(例如,…)之间共享它;您不仅可以共享按下按钮/菜单时触发的代码,还可以共享状态,尤其是可以共享操作(及其关联的小部件)是否处于启用状态。

  • 连接的多个输入有一个为Yes则输出Yes。 用法 Your browser does not support the video tag. 案例:小闹钟 功能:逢15就猫叫 工作原理 当输入为“yes”时,“或”节点为“yes”。 例如:一种报警装置,当被暴露在光强下(光强大于30),或者被移动(陀螺仪被震动)时报警。 请注意上面的程序等于: 提示 事实上,你不需要经常使用“或”节点,因为“或”逻

  • 下面是代码的味道:https://scastie.scala-lang.org/bQMGrAKgRoOFaK1lwCy04g 我有两个JSON APIendpoint。首先是项目。cgi以以下格式返回项目对象列表 表示项目没有借款人。 其次,用户。cgi,返回查询参数id指定的用户 API可能不好,但我必须处理它。现在在Scala中,我想使用这个漂亮的数据模型 我还有以下用于执行HTTP请求的方法

  • AspectJ意味着它的另一个AOP实现不是基于spring的,如果我们想使用它,那么除了spring之外,我们还需要包括一些第三方JAR。 Spring AOP注释意味着Spring使用AspectJ注释来提供AOP特性。 这些假设公平吗?

  • 问题内容: 我目前正在使用“设置”结构使用Redis。 我想知道是否有可能自动清理空的“ set”吗? 否则找到一个cron /进程来定期清理空的“ set” 更新: 更笼统的问题是,“(nil)”和“(空列表或集合)”之间存在差异(内存使用情况) 例: 要么 问题答案: 这已经是自动的。如果集合为空,则将其从名称空间中删除。 您不必执行任何特定操作即可从此行为中受益。 要回答第二个问题,(nil

  • 问题内容: 我有这个表达: 这些元素的(,,)有优先权? 您能用方括号显示操作顺序吗? 问题答案: 首先,然后,然后。 您的表情将被评估为。 https://docs.oracle.com/javase/tutorial/java/nutsandbolts/operators.html