我不确定这些概念,因此需要更清楚地理解这些概念。到目前为止,Java语言是单线程的,很好。
据我所知,setTimeout只是延迟了从主线程执行代码的时间,但是当调用堆栈为空时,回调仍在主线程上执行。它是否正确?对于承诺和事件处理程序也是如此。
setTimeout(() => {
console.log('this line of code is executed on the main thread');
}, 5000);
对于使用XMLHttpRequest的异步请求,实际的请求被发送到由浏览器实现的单独的API,该浏览器在单独的线程上运行该请求,因此,它实际上是异步的。这是正确的吗?
WebWorkers是浏览器实现的另一个API,该API还在后台线程中运行给定脚本中的代码。这是正确的吗?
非常感谢您回答这个问题!
Set timeout(设置超时)和任何其他异步功能将在先决条件完成时排队等待执行。因此,当调用堆栈为空并且有工作要做时,JS会选择下一个排队的函数并执行它。这由所谓的javascript事件队列处理。