setTimeout函数是在后台运行还是并行执行?
问题解答
先看你给出的代码:
setTimeout(function(){ console.log("hello async") }, 1000); console.log("Hello sync");
首先要明确:JavaScript是单线程执行模型,既不是后台运行也不是并行执行。
具体执行逻辑是这样的:
- 主线程优先执行所有同步代码,所以会先输出
Hello sync。 - 调用
setTimeout时,浏览器会启动一个独立的定时器线程负责计时(这个线程属于浏览器提供的宿主环境,并非JS主线程),等1秒计时结束后,会把setTimeout的回调函数放进任务队列。 - 只有当JS主线程的同步任务全部执行完毕、处于空闲状态时,才会从任务队列里取出回调函数执行,这时才输出
hello async。
简单总结:setTimeout的计时环节靠浏览器的其他线程完成,但回调函数的执行必须等待主线程空闲,全程没有并行执行JS代码,也不存在JS主线程后台运行任务的情况。
内容的提问来源于stack exchange,提问作者Kunal Ranjan
相关产品推荐
相关产品推荐

