【发布时间】:2021-08-04 05:19:07
【问题描述】:
由于现代浏览器支持 ES6。他们是否在内部将 ES6 转换为 ES5,然后执行代码?或者他们可以使用 C++ 引擎原生地理解 ES6 代码?
如果他们可以直接运行 ES6,它如何确保执行 ES6 代码的行为完全等同于执行该代码的转译 ES5 版本?
【问题讨论】:
-
原生代码将直接运行 ES6。他们不会担心 ES5,他们会遵循规范。262.ecma-international.org/6.0
-
转译后的代码是否与“本机” ES6 代码一样,不是浏览器关心的问题。这是编译器关心的问题。如果它们的行为不同,那么这是转译器中的错误。浏览器只会运行你给它的任何代码。
-
最新的规范是 ECMAScript 2020 262.ecma-international.org,那是 ES11 吗?自从转向年度规范以来,每个浏览器支持的哪些功能变得更加重要,而不是哪个版本。
-
确保 ES6 运行与 ES5 转译代码相同不是 JS 引擎的责任——这是转译器的责任。 JS 引擎需要按照规范运行 ES6 代码。 JS 引擎不会在内部将 ES6 转换为 ES5 - 它会原生执行 ES6。支持 TypeScript 的引擎(例如 Deno)会在内部将 TypeScript 转换为 ESx,然后运行 ESx(其中
x表示其当前支持的 JS 版本)。我知道没有运行时引擎本身支持 TypeScript。有很多原生支持 ES6 的 JS 引擎。 -
babel 是否总是能够将新的 ES 功能转译到 ES5 中?也就是说,在某些情况下,新的 JS 特性是否无法通过 ES5 模仿?
标签: javascript node.js ecmascript-6 browser ecmascript-2016