【问题标题】:How to create a completely new Keyword in JavaScript?如何在 JavaScript 中创建一个全新的关键字?
【发布时间】:2020-02-11 05:36:41
【问题描述】:

我试图弄清楚 Javascript 中任何新关键字的工作是如何实现的。

例如ES6,箭头函数不能用作带有 new 关键字的构造函数。此外,箭头函数不存在原型属性。 我知道它们与词汇 this 绑定。这与我们普通的构造函数不同。

那么我们的浏览器是如何理解箭头函数的。 如何理解箭头函数的底层工作原理。

如何向 JavaScript 添加新功能以及浏览器如何理解它?

【问题讨论】:

  • Javascript 引擎是为专门解析和运行给定语言规范而构建的代码体。当向规范中添加新功能(例如箭头函数)时,JS 引擎必须添加新代码以支持该新功能。在箭头函数的情况下,他们必须修改解析器,并且必须创建一种新类型的函数,该函数的行为与常规函数对象有些不同。它带有一个this 绑定,该绑定是在当时从当前词法环境声明函数时设置的,而不是通过调用它的方式设置的..
  • 要实现理解一种语言的语言引擎(例如浏览器),您需要用另一种语言编写该语言引擎。例如 Google Chrome 及其 V8 JS 引擎是用 C++ 编写的。所以要将箭头函数JS lang特性添加到V8引擎,需要添加一些C++代码。浏览器需要更新到较新的版本才能了解新的语言功能。
  • 非常感谢 cmets... 所以当新版本的浏览器发布时,相应的不同语言*的 JS 引擎会升级以支持类似于 JVM 的 javascript 功能。这将解释 node.js 以及它使用 V8。总之,我们需要升级后的 JS 引擎来理解任何被添加的新特性 javascript。

标签: javascript ecmascript-6 browser arrow-functions


【解决方案1】:

新功能是如何添加到 JavaScript 中的,浏览器如何理解它?

新语法(如箭头函数)和对象(如 Promises)通过 the TC39 process 添加到语言中,由 Ecma TC39 委员会管理。

Ecma TC39 委员会负责发展 ECMAScript 编程语言并编写规范。

您可以查看那里的链接,以大致了解提案必须经过的各个阶段才能添加到语言中。一旦添加到语言中,新的关键字或对象将在the official specification 中进行详尽的描述,旨在描述所有关于如何实现某事的细节。有一个很大的重点是使事情尽可能具有确定性。为了跨环境的兼容性,委员会必须尽可能多地找出精确的语义。这通常需要聪明人进行大量讨论和思考。

一旦提案的描述基本完成,并且提案已进入第 3 阶段(在第一个链接中进行了更详细的描述),预计环境将开始实施它。因此,例如,此时,您可能期望 Chrome (V8) 和/或 Firefox 最终开始发布新的浏览器版本,其中包含对新语法(关键字、对象等)的支持,可能在标志后面。

一旦提案有一些“现场”实现,并且一切似乎都按预期执行,ECMAScript 编辑器会将新提案整合到官方规范中,并且该提案可以说是“完成” ”。

可以在here找到另一个过程摘要。


特别是箭头函数,它们是在 ES2015 中添加的,因此在 2015 年左右的某个时候,浏览器开始修改其 Javascript 解释器以按照规范要求处理箭头函数。 2015 年以后的大多数浏览器版本都支持箭头功能; 2015 年之前的浏览器没有。 (例如,IE11,从 2013 年开始,不会也永远不会理解箭头函数——箭头函数的规范是在浏览器版本发布后出来的)

【讨论】:

  • 我猜OP实际上是在询问语言功能的实现,而不是语言标准的治理。这个答案是合法的。
猜你喜欢
  • 2011-01-19
  • 1970-01-01
  • 2016-12-05
  • 2011-10-25
  • 2022-01-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多