关于JS的定时器疑惑

关于JS的定时器疑惑,JS不是单线程吗,为什么这个三个定时器可以同时运行?一瞬间都弹出1来

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
    </head>
    <body>
        <script type="text/javascript">
            setTimeout(function(){
                console.log(1);
            },3000)
            setTimeout(function(){
                console.log(1);
            },3000)
            setTimeout(function(){
                console.log(1);
            },3000)
        </script>
    </body>
</html>
阅读 2.8k
5 个回答

js的单线程是针对事件循环层面的。但是在虚拟机层面它是多线程的。你可以理解为多人同时做事情,但最后是排队汇报成果

看起来同时,还是有先后顺序,可以把弹出来的1改成1.2.3看看顺序

主要是你的回调程序没有发生阻塞,否则你就可以看到效果了。

可以了解一下浏览器相关的event loop

因为你定时之后相当于将你的三个方法挂起,暂时不理会,等到3s之后再去执行,因为你这里都是3s,所以几乎时同时执行的,但其实这三个也是有顺序执行的。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题