我在 javascript 中有以下代码:
var x = 1;
console.log('printing x'+x);
setTimeout(()=>{console.log("first timeout")},2000);
setTimeout(()=>{console.log("second timeout")},0);
我知道在“第一次超时”之前打印了“第二次超时”。我了解 javascript 中的事件循环和异步行为,但我对浏览器 api 的方式有很大的困惑:所有这些异步函数(如setTimeout()
ajax 请求)在哪里注册,并行执行这些函数。我知道这个浏览器 api 是用 c++ 编写的,所以可以是多线程的,但我不确定 100% 是否是。
例如,上面的代码setTimeout((),2000)
首先在浏览器 api 中注册,然后计时器函数开始执行它。稍后setTimeout((),0)
在第一个setTimeout
仍在执行时注册。这里要从 second 获取结果,setTimeout
浏览器 api 必须共享计时器或延迟机制或资源,以便 secondTimeout 的结果首先放入回调队列中。所以简而言之,我的问题是,浏览器 api 是多线程的吗?如果没有,它如何处理我的担忧?