美文网首页
JavaScript的前世今生

JavaScript的前世今生

作者: ayusong870 | 来源:发表于2020-12-14 13:31 被阅读0次

Tim Berners-Lee 于 1989 年发明了万维网并于 1991 年对外发布了世界上第一个网页浏览器 WorldWideWeb,从此拉开了 Web 时代的序幕;

1994 年网景公司(Netscape)发布了 Navigator 浏览器 0.9 版本,这是历史上第一个比较成熟的网络浏览器,轰动一时。

彼时这个版本的浏览器只能用来浏览,不具备与访问者互动的能力,因此 Netscape 急需一种网页脚本语言,使浏览器可以与网页进行互动。1995 年的夏天 Netscape 雇佣了 Brendan Eich,目标是把 Scheme 语言嵌入到 Netscape Navigator 浏览器当中,但更早之前 Netscape 已经跟 Sun 公司合作在 Netscape Navigator 中支持 Java,彼时 Netscape 内部也产生了激烈的争论,最后 Netscape 决定发明一种可以和 Java 搭配使用的脚本语言。
为了应付公司对网页脚本语言的任务,Brendan Eich 只用了十天时间就把 JavaScript 设计了出来。最初这个语言被命名为 Mocha,1995 年 9 月在 Netscape Navigator 2.0 的 Beta 版中改名为 LiveScript,同年 12 月,Netscape Navigator 2.0 Beta 3 中部署时被重命名为 JavaScript。当时 Netscape 和 Sun 公司组成的开发联盟为了能让这个语言搭上 Java 的热度,被临时命名为 JavaScript ,这也是日后成为大众对这门语言有诸多误解的原因之一。

今天 JavaScript 似乎印证了 Write Once Run Anywhere 的优势,Brendan Eich 作为 JavaScript 之父,在编程的历史上留下了他的印记。

Javascript历史上的黑暗时刻

Netscape 推出 JavaScript 后在浏览器上大获成功,于是微软模仿 JavaScript 开发了一种相近的语言内置在 Internet Explorer 中并取名为 JScript,与当时处于市场领导地位的 Netscape 同台激烈竞争。由于 JScript 也是一种 JavaScript 实现,这两个语言版本在浏览器上共存也意味着语言标准化的缺失,除此之外,微软也在网页技术上加入了不少专属对象,使不少网页使用非微软平台及浏览器无法正常显示。

这一时期,网页开发有如下几个特点:

使用专属格式,不尊重网页标准;
网页开发兼容性堪忧;
专属对象过多。
对于网页开发者来说彼时堪称“黑暗时刻”,JavaScript 这门弱小的语言堪比工程玩具,各个方面都极度不完善,不仅如此由于浏览器大战微软一家独大的结局为开发者带来了噩梦般的兼容体验。

五年后 Internet Explorer 6 SP1 成为了最后一款可独立下载的 IE 浏览器,以这个时间点为标志宣告了浏览器大战的结束,也是同年开始 Internet Explorer 市场逐步被其他浏览器蚕食,如:Mozilla Firefox Opera Safari Chrome。时间进入 2003 年之后,鉴于微软产品的安全性成为人们的热门话题以及受到了 Firefox 的强力竞争,2005 年最后一个季度 Internet Explorer 市场占有率随之下降到了 85%。在此后的几年中网页开发者不得不面对不同浏览器的兼容性问题,为了修补这些问题,除了成立 WHATWG 工作组外,很多开发者为此开发了不同的库来解决这些问题。

1998 年后 Internet Explorer 取代 Netscape Navigator 成为主要浏览器。

标准化

由于 Netscape 遭遇微软的强力竞争不得不将 JavaScript 提交给国际标准化组织 ECMA,希望 JavaScript 能够成为国际标准,以此对抗微软,TC39(Technical Committee 39)负责制定和审核这个标准。1997 年 7 月 ECMA 组织发布了 262 号标准文件的第一版,规定了浏览器脚本语言的标准,并将这种语言称为 ECMAScript,但由于微软 Internet Explorer 的 JScript 随着市场占有率成为了事实标准,那一段时间 ECMA 公开的标准相对弱小,直到随着 Firefox 市场占有率不断提高,Brendan 迫使微软回到了标准指定的议程中(IE9 之后你再也看不见 JScript 的原因),目前流行最广,影响最大的一个基于 ECMAScript 标准实现的语言无疑就是 JavaScript 了。
TC39(Technical Committee 39)是一个推动 JavaScript 发展的委员会,它的成员包括了各浏览器厂商以及业务与浏览器紧密相连的公司,在标准到落地这个相对漫长的过程里,TC39 制定了一系列的规范来标准化这个流程,它一共有五个阶段:

  • stage 0 strawman:任何讨论、想法、改变或者还没加到提案的特性都在这个阶段,但只有 TC39 成员可以提交。
  • stage 1 proposal:产出一个正式的提案,发现潜在的问题,例如与其他特性的关系,实现难题,提案包括详细的 API 描述,使用例子,以及关于相关的语义和算法。
  • stage 2 draft:提供一个初始的草案规范,与最终标准中包含的特性不会有太大差别,草案之后,原则上只接受增量修改,开始实验如何实现,实现形式包括 polyfill,实现引擎(提供草案执行本地支持),或者编译转换(例如 babel)。
  • stage 3 candidate:候选阶段,获得具体实现和用户的反馈,此后,只有在实现和使用过程中出现了重大问题才会修改,规范文档必须是完整的,评审人和 ECMAScript 的编辑要在规范上签字,至少要在一个浏览器中实现,提供 polyfill 或者 babel 插件。
  • stage 4 finished:已经准备就绪,该特性会出现在下个版本的 ECMAScript 规范之中,需要通过有 2 个独立的实现并通过验收测试,以获取使用过程中的重要实践经验。

babel

babel 是一个用于 Web 开发的 JavaScript 编译器,在 TC39 的标准进程中从 stage 2 draft 到 stage 3 candidate 都需求可被 babel 转换或提供 babel 插件(可选),事实上 babel 对于促进新的标准被广大开发者所使用,反馈,是极好的一种方式,TC39 0-3 我们都可以使用对应的 presets 来运用,如:

npm install --save-dev @babel/preset-stage-0

.babelrc

{
  "presets": ["@babel/preset-stage-0"]
}

有时候令人费解的版本就像 JavaScript 混乱的出生到成长的过程,不同的年代有些版本有时根据迭代版本号命名,有时又根据年份来命名,而这种命名的不确定又使得人们更加容易混淆 JavaScript/ECMAScript 这两个概念,因此官方对于这种约束有了一种更直接的命名方式,那就是以年份为版本号。

近些年来 JavaScript 取得的成绩大家有目共睹,作为目前唯一可运行在浏览器中的语言,以及它在其他领域如:Node.js 移动端等如火如荼的进行中。

相关文章

  • JavaScript的前世今生

    Tim Berners-Lee 于 1989 年发明了万维网并于 1991 年对外发布了世界上第一个网页浏览器 W...

  • JavaScript——入门篇

    JS 前世今生 JavaScript 和它父亲的故事 维基百科 基本语法 变量 相关概念 JavaScript 是...

  • Web技术的前世今生(三)

    前言:我是JavaScript,如果你还不认识我,不妨先看看《Web技术的前世今生(一)》,以及《Web技术的前世...

  • HTML、CSS、JavaScript 前世今生

    HTML、CSS、Javascript 的历史 1980年,欧洲核子研究中心(CERN)工作的物理学家蒂姆·伯纳斯...

  • Javascript异步编程的前世今生

    Javascript语言的执行环境是"单线程"(single thread) 所谓"单线程",就是指一次只能完成一...

  • css简史

    css 简史 简述 CSS 的前世今生未来,如何成为和html,javascript并称为web前端的三大技术基石...

  • 将军在上之男昭女惜重生三世千年孽缘

    前世!今生!来世再续! 前世欠谁!今生还!来世再续前缘! 前世因!今生续!来世果!

  • 人死,并非如灯灭……

    “今生,是前世的“来生”,是来生的“前世”。在今生中,我们能见到自己的前世与来生。回溯前世,是为了改善今生;回到今...

  • 前世今生来世缘

    谈何前世情 今生还 今生情 来世还 前世孽债 前世还 未了 今生还 今生欠 今生还 谈何来世还 来世欠 来世还 能...

  • iOS Device ID 的前世今生

    iOS Device ID 的前世今生 iOS Device ID 的前世今生

网友评论

      本文标题:JavaScript的前世今生

      本文链接:https://www.haomeiwen.com/subject/mngaahtx.html