我知道V8是一个JavaScript引擎,但它也是一个运行时环境吗?我知道运行时环境为引擎提供了事件循环、API、回调队列等,但从我读过的内容来看,V8 似乎也提供了它们?是引擎 > 运行时环境还是反之亦然?
V8是一个JavaScript引擎,提供运行时环境。
V8 或任何其他 JavaScript 引擎提供的 JavaScript 运行时环境由内存堆和调用堆栈组成,实际的 JS 代码在其中编译和执行。
事件循环、Web API 和回调队列不是由 V8 提供的,而是由 V8 托管的环境提供的。V8 的托管环境可以是浏览器(如 Google Chrome)或 Node.js .
如果你看这个,在边框线的左侧,就是V8提供的JS运行环境。在右侧,您可以看到浏览器(托管环境)提供的Web API、回调队列和事件循环。希望它能澄清。
图片来源:sessionstack blogpost。
不。 V8 编译并执行 JavaScript 源代码,处理对象的内存分配,并垃圾收集不再需要的对象。 V8 的 stop-the-world、分代、准确的垃圾收集器是 V8 性能的关键之一。
JavaScript 通常用于浏览器中的客户端脚本,例如用于操作文档对象模型 (DOM) 对象。然而,DOM 通常不是由 JavaScript 引擎提供,而是由浏览器提供。 V8 也是如此——Google Chrome 提供了 DOM。然而,V8 确实提供了 ECMA 标准中指定的所有数据类型、运算符、对象和函数。
V8 使任何 C++ 应用程序都可以向 JavaScript 代码公开其自己的对象和函数。由您决定要向 JavaScript 公开的对象和函数。