【发布时间】:2020-04-30 00:22:45
【问题描述】:
我需要更清楚地理解这些概念,因为我不确定。 Javascript 是单线程的,到目前为止,一切都很好。
-
据我了解,setTimeout 只是延迟了主线程中代码的执行,但当调用堆栈为空时,它仍会在主线程上执行回调。它是否正确? Promises 和 Event Handlers 也是如此。
setTimeout(() => { console.log('this line of code is executed on the main thread'); }, 5000); 对于使用 XMLHttpRequest 的异步请求,实际请求被发送到由浏览器实现的单独 API,在单独的线程上运行它,因此它是真正的异步。这是正确的吗?
WebWorkers 将是浏览器实现的另一个 API,它也在后台线程中运行来自给定脚本的代码。这是正确的吗?
如果能回答这个问题,我将不胜感激!
【问题讨论】:
-
1、2 和 3:是
-
我建议阅读 JS 中的事件循环。它回答了你上面提到的所有问题。
-
基本上,javascript是单线程的,浏览器不是用javascript编写的。 (请注意,Promise 与 setTimeout 并不完全相同,它们需要一个父任务,而 setTimeout 将是它们自己的任务。
标签: javascript asynchronous xmlhttprequest settimeout web-worker