Javascript v8引擎和Web API

社会

我一直在阅读Javascript的内部知识(在chrome浏览器的上下文中),但我有几个问题似乎找不到适当的答案。

根据我的理解:

  • V8引擎中包含核心Javascript(根据ECMA规范)。

  • settimeout浏览器的Web API提供了类似功能

  • V8引擎包括一个调用堆栈,任何要执行的Javascript都会推送到该堆栈上。

  • 然后通过Web API调用非标准函数。

  • 这些完成时将被推送到回调队列。

  • 一旦堆栈为空,事件循环会将回调队列上的所有内容压入堆栈。

我的问题是,当V8引擎解释Javascript代码时,如何知道某个特定功能来自Web API?Web API实际如何与引擎链接?

jfriend00

诸如此类setTimeout()API已添加到globalJavascript对象中。当JS引擎寻求解析符号时,它从本地范围开始,并向上延伸一系列范围。范围的最末端是global范围。

宿主环境可以作为初始化V8引擎的一部分,将其自己的API添加到V8引擎的全局范围中,这正是浏览器为V8尚未内置的功能所做的事情。

浏览器中的全局对象的概念比可能应该的有点混乱。多年来,全局对象一直是window对象。所有可全局访问的主机环境功能,例如,setTimeout()都是window对象的属性

同样,在浏览器的顶级范围内声明任何变量将自动使这些变量成为window对象的属性

这太乱了。当出现newclass关键字时,他们决定不再继续使情况变得更糟,因此在浏览器的顶级范围内声明的类在全局范围内可用,但不作为window对象的属性添加

当node.js环境出现时,他们将用户代码组织到模块中,目标是使全局变量尽可能少。在这种环境中,全局变量是名为的对象的属性global您在node.js模块的顶层声明的变量仅作用于模块内。什么都不会自动成为全局变量,但是global如果您愿意,您可以为该对象显式分配一个新属性,例如:

global.myProperty = 3;

尽管在node.js模块化设计中强烈建议不要这样做。

因此,在初始化V8引擎时,浏览器环境会将setTimeout()添加到ECMAScript规范之外的,在浏览器中Javascript顶层添加的任何API都添加到global对象。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么将JavaScript V8引擎称为引擎?

来自分类Dev

为什么将JavaScript V8引擎称为引擎?

来自分类Dev

在嵌入式V8引擎中调试JavaScript

来自分类Dev

javascript D8引擎版本3.14

来自分类Dev

V8 Javascript引擎:v8 ::参数和功能模板

来自分类Dev

V8引擎不再因错误而中断

来自分类Dev

将标志传递到Azure Web Apps中的NodeJS的Chrome V8引擎

来自分类Dev

在独立的V8 Javascript引擎中使用Web-Workers

来自分类Dev

如何在终端中比较 Chrome 和 NodeJS 之间的 V8 Javascript 引擎版本?

来自分类Dev

在V8 Javascript引擎中,如何使用C ++ API将功能模板添加为另一个功能模板的属性?

来自分类Dev

在V8 Javascript引擎中,如何使用C ++ API将功能模板添加为另一个功能模板的属性?

来自分类Dev

V8引擎如何处理添加属性的排序?

来自分类Dev

带有C ++ 11的Google v8引擎

来自分类Dev

V8引擎是否知道如何使用Intel语法打印生成的机器代码?

来自分类Dev

如何删除 Bing Maps V8 Javascript API 中的军械测量选项?

来自分类Dev

可以在Chrome中的JavaScript中获取V8 JavaScript引擎版本号

来自分类Dev

反复初始化Clearscript V8引擎时内存不足(GC问题?)

来自分类Dev

如何在其他c ++项目中使用Google V8引擎?

来自分类Dev

在ArangoDB中,如果我们不使用任何JS过程,可以禁用V8引擎吗?

来自分类Dev

在ArangoDB中,如果我们不使用任何JS过程,可以禁用V8引擎吗?

来自分类Dev

在V8 JavaScript引擎中,如何使每个实例重新使用ObjectTemplate的构造函数?

来自分类Dev

javascript V8优化和“泄漏参数”

来自分类Dev

v8,libuv,nodejs,win32 API-如何调用EnumWindows并具有回调调用javascript函数?

来自分类Dev

v8 C++ Api:将非英文字符串从 JavaScript 传递给 C++

来自分类Dev

在 Node.js 中,如果 v8 运行您的 JavaScript,那么 Node.js Api 由什么运行?

来自分类Dev

实施JavaScript Web API接口

来自分类Dev

是否可以在不使用SSL的情况下通过HTTP调用统一引擎API?

来自分类Dev

在V8上进行JavaScript测试

来自分类Dev

V8中的Javascript等效项?

Related 相关文章

  1. 1

    为什么将JavaScript V8引擎称为引擎?

  2. 2

    为什么将JavaScript V8引擎称为引擎?

  3. 3

    在嵌入式V8引擎中调试JavaScript

  4. 4

    javascript D8引擎版本3.14

  5. 5

    V8 Javascript引擎:v8 ::参数和功能模板

  6. 6

    V8引擎不再因错误而中断

  7. 7

    将标志传递到Azure Web Apps中的NodeJS的Chrome V8引擎

  8. 8

    在独立的V8 Javascript引擎中使用Web-Workers

  9. 9

    如何在终端中比较 Chrome 和 NodeJS 之间的 V8 Javascript 引擎版本?

  10. 10

    在V8 Javascript引擎中,如何使用C ++ API将功能模板添加为另一个功能模板的属性?

  11. 11

    在V8 Javascript引擎中,如何使用C ++ API将功能模板添加为另一个功能模板的属性?

  12. 12

    V8引擎如何处理添加属性的排序?

  13. 13

    带有C ++ 11的Google v8引擎

  14. 14

    V8引擎是否知道如何使用Intel语法打印生成的机器代码?

  15. 15

    如何删除 Bing Maps V8 Javascript API 中的军械测量选项?

  16. 16

    可以在Chrome中的JavaScript中获取V8 JavaScript引擎版本号

  17. 17

    反复初始化Clearscript V8引擎时内存不足(GC问题?)

  18. 18

    如何在其他c ++项目中使用Google V8引擎?

  19. 19

    在ArangoDB中,如果我们不使用任何JS过程,可以禁用V8引擎吗?

  20. 20

    在ArangoDB中,如果我们不使用任何JS过程,可以禁用V8引擎吗?

  21. 21

    在V8 JavaScript引擎中,如何使每个实例重新使用ObjectTemplate的构造函数?

  22. 22

    javascript V8优化和“泄漏参数”

  23. 23

    v8,libuv,nodejs,win32 API-如何调用EnumWindows并具有回调调用javascript函数?

  24. 24

    v8 C++ Api:将非英文字符串从 JavaScript 传递给 C++

  25. 25

    在 Node.js 中,如果 v8 运行您的 JavaScript,那么 Node.js Api 由什么运行?

  26. 26

    实施JavaScript Web API接口

  27. 27

    是否可以在不使用SSL的情况下通过HTTP调用统一引擎API?

  28. 28

    在V8上进行JavaScript测试

  29. 29

    V8中的Javascript等效项?

热门标签

归档