我在Javascript MCQ测试中遇到了这个简单(或我认为是这样)的问题:
After how much time will the following code execute entirely?
setTimeOut(console.log("hi"),1000);
setTimeOut(console.log("hi"),1000);
setTimeOut(console.log("hi"),1000);
setTimeOut(console.log("hi"),1000);
setTimeOut(console.log("hi"),1000);
Options
A) 1 second
B) 2 seconds
C) 4 seconds
D) 5 seconds
我回答为选项D) 5 seconds
,因为上面的每一行都需要1000毫秒来执行,即总计5000毫秒= 5秒
但是在结果中,它表示实际答案是选项A) 1 second
。
我在控制台中(总共)执行了这五行代码,并在1秒钟后执行了整个代码,如答案所示。
我不理解正确答案背后的逻辑,以及为什么我的推理是错误的。
答案 0 :(得分:2)
因为setTimeout是异步工作的,这意味着所有这5条语句将同时执行,并且所有这些将开始等待1秒钟。一秒钟后将全部执行。希望它清除。
答案 1 :(得分:1)
每次调用都会使其在自己的后台线程中运行(这是自己的唯一操作),当调用setTimeout时,您是在告诉JavaScript您希望在1秒钟后执行代码。
如果要持续5秒钟,则可以执行以下操作:
setTimeout(function() {
console.log("First task")
setTimeout(function() {
console.log("Second task");
},1000);
},1000);
这将执行第一个任务,一旦调用它将执行第二个任务
编辑:我看到了另一篇关于非异步的文章,您想避免在JavaScript中做任何非异步的事情,因为它会阻塞浏览器,这通常是一种不好的做法,并且会带来糟糕的用户体验
答案 2 :(得分:0)
在MDN页上:
setTimeout()方法...设置一个计时器,该计时器执行 功能或指定的代码段,只要计时器到期即可。