javascript - 浏览器 web api 在 Javascript 中运行在哪里?

标签 javascript multithreading asynchronous settimeout

浏览器 web api 在 Javascript 中像 setTimeout 一样在哪里运行?

它们是在其他环境中运行还是借助 javascript 单线程?

最佳答案

它们在 JavaScript 运行时之外运行。这些“Web API”在浏览器的 Web API 执行空间内执行。
setTimeout()例如,是 window 的方法对象(它也可以调用为 window.setTimeout() )。 window根本不是 JavaScript 的一部分(它是一个浏览器对象)和任何你问的 window为您做的事情是在 JavaScript 运行时之外以及由浏览器的其他功能处理的。 Web API 调用的请求源自 JavaScript 环境内部,但 API 调用的执行实际上在其外部运行。

这就是我们可以在 Web 应用程序中具有异步行为的原因。当 JavaScript 运行时(它是一个一次只能做一件事的同步环境)做它的一件事时,浏览器可以做其他事情。
setTimeout() , alert() , navigator.geolocation , XMLHttpRequest都是在 JS 引擎之外运行的 Web API 的示例。

这里有一些 other Web API's here is a great video 这在计时器的上下文中具体解释了这一点。

关于javascript - 浏览器 web api 在 Javascript 中运行在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49264524/

相关文章:

javascript - Chrome getComputedStyle() 返回错误的 RGBA 颜色?

javascript - 如何使用 angularJs 创建具有连续数字的多维矩阵

java - 使用改造向请求添加 header 时如何避免在主线程上等待?

ios - 通过异步调用问题将数据加载到数组中(Geofire、Swift)

javascript - 如何创建仅在同时按下两个 'shift + left/right arrow' 键后触发的事件监听器?

java - RxJava 异步订阅

当某些线程创建 Webdriver 时 Python Selenium 失败

javascript - 如何从异步调用返回响应?

linux -/proc/sys/fs/aio-nr 永远不会高于 1024(Linux 上的 AIO)

javascript - 固定控制栏