为了账号安全,请及时绑定邮箱和手机立即绑定

为什么setTimeout在指定时间后没有触发

为什么setTimeout在指定时间后没有触发

慕的地10843 2021-05-07 18:20:00
我在Viusal Studio代码中运行了非常基本的javascript代码。但是我没有看到回调函数被触发。我试图了解setTimeout()在javascript中的工作方式。我正在Visual Studio代码中运行以下代码(在名为test.js的文件中),如下所示:节点test.js'use strict'let timerexpired = false;setTimeout( function() {console.log(`setting timerexpired to true...`);                        timerexpired = true;                        },                         5000);while(1) {    console.log(`timerexpired = `, timerexpired);    if (timerexpired) {        console.log(`timer expired.  Resume execution`);        break;    } else {        console.log(`keep on spinning`);    }}预期循环将在5000毫秒后中断。但它会继续旋转,输出为“继续旋转”
查看完整描述

2 回答

?
鸿蒙传说

TA贡献1865条经验 获得超7个赞

setTimeout实际上,当您致电或进行任何阻止操作时,它实际上已添加到事件表中,而不会立即执行。

只有在调用堆栈为空之后,事件循环才检查事件表以查看是否有任何等待,并将其移至调用堆栈。

为了更好地理解这一点,请检查以下示例:

setTimeout(() => console.log('first'), 0)
console.log('second')

您可能会认为该first日志将在之前记录second,但实际上它second是最先记录的。

在您的示例中,调用堆栈永远不会为空,因此setTimeout不会真正按预期工作。

您可能想检查一下,这将使您对幕后发生的事情有个更好的了解。


查看完整回答
反对 回复 2021-05-13
?
守着一只汪

TA贡献1872条经验 获得超3个赞

While(1)是一个无限的while循环。我认为那是原因


查看完整回答
反对 回复 2021-05-13
  • 2 回答
  • 0 关注
  • 345 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信