js

js起源不提。

js本身其实是编译语言,但编译本身是代码执行之前。

  1. tokening/lexing 分词、词法分析。这个词汇在vue源码中也能看到,是指普通的字符串解析为有意义的代码块。两者也可以区分,前者更倾向于无意义的机械地区分和识别,后者有意义地进行解析。
  2. parsing 解析、词法分析。这个也不难理解,这一步把 token list 转成 ast 抽象语法树。每一层的节点表示不同的含义
  3. generate 代码生成。这个也不陌生,vue源码里也存在。

以上是传统的、通用的编译。js会比这复杂。

ECMA-262

  • ECMA:读音类似“埃科妈”,是欧洲计算机制造商协会(European Computer Manufacturers Association)的简称,是一家国际性会员制度的信息和电信标准组织。
  • Ecma 国际:1994 年之后,由于 ECMA 组织的标准牵涉到很多其他国家,为了体现其国际性,更名为 Ecma 国际(Ecma International)。
  • ECMAScript:由 Ecma 国际在标准 ECMA-262 中定义的脚本语言规范。JavaScript 是 ECMA-262 标准的实现和扩展。
  • ECMA-262:Ecma 国际的标准,都会以 Ecma-Number 命名,ECMA-262 就是 ECMA 262 号标准,具体就是指 ECMAScript 遵照的标准。1996 年 11 月,网景公司将 JavaScript 提交给 Ecma 国际进行标准化。ECMA-262 的第一个版本于 1997 年 6 月被 Ecma 国际采纳。

全网最全 ECMAScript 攻略 :https://juejin.cn/post/6954248023522148389

ES迭代

ES 每次迭代都有或多或少的增补删改。

es历史做个简要回顾:

  • ES1 2019年
  • ES3 补充了常见的语言特性
  • ES4 做了大量的修改,但是最终被废弃了
  • ES5 在 ES3的基础上做了修改,也就形成了目前使用最广泛的版本
  • ES2015 推出。这一版包含了大概这个规范有史以来最重要的一批增强特性。ES6正式支持了类、模块、迭代器、生成器、箭头函数、期约Promise、反射、代理和众多新的数据类型。
  • ES2016 这次修订只包含少量语法层面的增强,如Array.prototype.includes和指数操作符。
  • ES2017 这一版主要增加了异步函数(async/await)、SharedArrayBuffer及AtomicsAPI,以及Object.values()/Object.entries()/Object.getOwnPropertyDescriptors()和字符串填充方法,另外明确支持对象字面量最后的逗号。
  • ES2018 这次修订包括异步迭代、剩余和扩展属性、一组新的正则表达式特性、Promisefinally(),以及模板字面量修订。
  • ES 2019 这次修订增加了Array.prototype.flat()/flatMap()、String.prototype.trimStart()/trimEnd()、Object.fromEntries()方法,以及Symbol.prototype.description属性,明确定义了Function.prototype.toString()的返回值并固定了Array.prototype.sort()的顺序。另外,这次修订解决了与JSON字符串兼容的问题,并定义了catch子句的可选绑定。

等。这里应当有一个 历史纵览。
比如《ES5 to ESNext — 自 2015 以来 JavaScript 新增的所有新特性》

-1 参考资料