JavScript是Brendan Eich仅花了十天时间就设计出来的!!!

今天讲个小故事。

布兰登·艾克(英语:Brendan Eich)

美国程序技术专家与企业家,JavaScript主要创造者与架构师,曾任Mozilla公司的首席技术官,并曾短暂担任首席执行官。

“1994年,网景公司(Netscape)发布了Navigator浏览器0.9版。这是历史上第一个比较成熟的网络浏览器,轰动一时。但是,这个版本的浏览器只能用来浏览,不具备与访问者互动的能力。…网景公司急需一种网页脚本语言,使得浏览器可以与网页互动。”

网页脚本语言到底是什么语言?网景公司当时有两个选择:一个是采用现有的语言,比如Perl、Python、Tcl、Scheme等等,允许它们直接嵌入网页;另一个是发明一种全新的语言。

这两个选择各有利弊。第一个选择,有利于充分利用现有代码和程序员资源,推广起来比较容易;第二个选择,有利于开发出完全适用的语言,实现起来比较容易。

到底采用哪一个选择,网景公司内部争执不下,管理层一时难以下定决心。

就在这时,发生了另外一件大事:1995年Sun公司将Oak语言改名为Java,正式向市场推出。

Sun公司大肆宣传,许诺这种语言可以"一次编写,到处运行"(Write Once, Run Anywhere),它看上去很可能成为未来的主宰。

我目前是在职前端开发,如果你现在也想学习前端开发技术,
在入门学习前端的过程当中有遇见任何关于学习方法,学习路线,学习效率等方面的问题,
你都可以申请加入我的前端学习交流裙:前面:851 中间:231 最后:348。里面聚集了一些正在
自学前端的初学者裙文件里面也有我做前端技术这段时间整理的一些前端学习手册,前端面试题,
前端开发工具,PDF文档书籍教程,需要的话都可以自行来获取下载。

网景公司动了心,决定与Sun公司结成联盟。它不仅允许Java程序以applet(小程序)的形式,直接在浏览器中运行;甚至还考虑直接将Java作为脚本语言嵌入网页,只是因为这样会使HTML网页过于复杂,后来才不得不放弃。

总之,当时的形势就是,网景公司的整个管理层,都是Java语言的信徒,Sun公司完全介入网页脚本语言的决策。因此,Javascript后来就是网景和Sun两家公司一起携手推向市场的,这种语言被命名为"Java+script"并不是偶然的。

此时,34岁的系统程序员Brendan Eich登场了。1995年4月,网景公司录用了他。

Brendan Eich的主要方向和兴趣是函数式编程,网景公司招聘他的目的,是研究将Scheme语言作为网页脚本语言的可能性。Brendan Eich本人也是这样想的,以为进入新公司后,会主要与Scheme语言打交道。

仅仅一个月之后,1995年5月,网景公司做出决策,未来的网页脚本语言必须"看上去与Java足够相似",但是比Java简单,使得非专业的网页作者也能很快上手。这个决策实际上将Perl、Python、Tcl、Scheme等非面向对象编程的语言都排除在外了。

Brendan Eich被指定为这种"简化版Java语言"的设计师。

但是,他对Java一点兴趣也没有。为了应付公司安排的任务,他只用10天时间就把Javascript设计出来了。

由于设计时间太短,语言的一些细节考虑得不够严谨,导致后来很长一段时间,Javascript写出来的程序混乱不堪。如果Brendan Eich预见到,未来这种语言会成为互联网第一大语言,全世界有几百万学习者,他会不会多花一点时间呢?

总的来说,他的设计思路是这样的

(1)借鉴C语言的基本语法;

(2)借鉴Java语言的数据类型和内存管理;

(3)借鉴Scheme语言,将函数提升到"第一等公民"(first class)的地位;

(4)借鉴Self语言,使用基于原型(prototype)的继承机制。

所以,Javascript语言实际上是两种语言风格的混合产物----(简化的)函数式编程+(简化的)面向对象编程。这是由Brendan Eich(函数式编程)与网景公司(面向对象编程)共同决定的。

多年以后,Brendan Eich还是看不起Java。

他说:

“Java(对Javascript)的影响,主要是把数据分成基本类型(primitive)和对象类型(object)两种,比如字符串和字符串对象,以及引入了Y2K问题。这真是不幸啊。”

把基本数据类型包装成对象,这样做是否可取,这里暂且不论。Y2K问题则是直接与Java有关。根据设想,Date.getYear()返回的应该是年份的最后两位:

 var date1 = new Date(1999,0,1);var year1 = date1.getYear();alert(year1); // 99

但是实际上,对于2000年,它返回的是100!

 var date2 = new Date(2000,0,1);var year2 = date2.getYear();alert(year2); // 100

如果用这个函数生成年份,某些网页可能出现"19100"这样的结果。这个问题完全来源于Java,因为Javascript的日期类直接采用了java.util.Date函数库。Brendan Eich显然很不满意这个结果,这导致后来不得不添加了一个返回四位数年份的Date.getFullYear()函数。

如果不是公司的决策,Brendan Eich绝不可能把Java作为Javascript设计的原型。作为设计者,他一点也不喜欢自己的这个作品:

“与其说我爱Javascript,不如说我恨它。它是C语言和Self语言一夜情的产物。十八世纪英国文学家约翰逊博士说得好:‘它的优秀之处并非原创,它的原创之处并不优秀。’(the part that is good is not original, and the part that is original is not good.)”

今天讲个小故事,Javascript诞生记相关推荐

  1. 为何我们要用 React 来写小程序 - Taro 诞生记

    在互联网不断发展的今天,前端程序员们也不断面临着新的挑战,在这个变化多端.不断革新自己的领域,每一年都有新的美好事物在发生.从去年微信小程序的诞生,到今年的逐渐火热,以及异军突起的轻应用.百度小程序等 ...

  2. Flutter 实战之南瓜屋故事App诞生记

    关于南瓜屋故事 南瓜屋故事是360旗下的以真人.真事.真情为调性的故事社区.这是一个以真实故事为内核的用户创作和分享平台,用户可以在这里写真实故事,看其他人的故事.它背靠360三大产品:导航.搜索.浏 ...

  3. 一个心理学教授给讲的小故事

    晚上吃饭,机缘巧合坐上有一位心理学教授,我们在聊对用户的理解,"接地气"的话题,他给讲了个故事,挺有启发.说的是他让学生暑期去实习的事,要求赚到钱,凭回忆,以对话的形式记录如下. ...

  4. [Javascript]诞生记

    作者: 阮一峰 日期: 2011年6月24日 1. 二周前,我谈了一点Javascript的历史. 今天把这部分补全,从历史的角度,说明Javascript到底是如何设计出来的. 只有了解这段历史,才 ...

  5. Gitter - 高颜值GitHub小程序客户端诞生记

    0. 前言 嗯,可能一进来大部分人都会觉得,为什么还会有人重复造轮子,GitHub第三方客户端都已经烂大街啦.确实,一开始我自己也是这么觉得的,也问过自己是否真的有意义再去做这样一个项目.思考再三,以 ...

  6. Gitter - 高颜值GitHub小程序客户端诞生记 1

    0. 前言 嗯,可能一进来大部分人都会觉得,为什么还会有人重复造轮子,GitHub第三方客户端都已经烂大街啦.确实,一开始我自己也是这么觉得的,也问过自己是否真的有意义再去做这样一个项目.思考再三,以 ...

  7. JavaScript诞生记

    1995年布兰登.艾克进入网景公司,为其浏览器开发了JS功能 临危受命 公司要求给浏览器添加一个脚本功能 公司要求这个功能要蹭Java的流量 布莱登花10天时间设计了JS的最初版本 1996年,网景向 ...

  8. cpp map 获取所有 key_R语言中强大的map函数——铁哥小故事版

    点击上方"蓝字"关注,给铁哥一点支持哟! 上次我们提到了R语言殿堂级人物Hadley Wickham,除了耳熟能详的'ggplot2' 软件包以外,他还有很多优秀的作品,比如本文将 ...

  9. 做领导的需要学会讲的38个小故事

    做领导的需要学会讲的三十八个小故事õÐ 一.用人之道      去过庙的人都知道,一进庙门,首先是弥陀佛,笑脸迎客,而在他的北面,则是黑口黑脸的韦陀.但相传在很久以前,他们并不在同一个庙里,而是分别掌 ...

最新文章

  1. Linux06-服务、守护进程和systemd
  2. 手把手教你使用FineUI开发一个b/s结构的取送货管理信息系统(附源码+视频教程(第9节))...
  3. 关于电脑的十大误区,原来是这样!
  4. 原来这些行业的“潜规则”是这样的...
  5. Extjs DateField onchange
  6. SpringMVC-动力节点-王鹤
  7. ztree局部刷新节点_神经网络训练的世界记录是怎样被刷新的 -- 总结分布式训练的计算场景...
  8. ubuntu永久修改主机名
  9. 【转】C51中断函数的写法
  10. 常用的数据库操作语句(3)
  11. MySQL_Ubuntu安装
  12. 马斯克神经网络转换器_通过转换数据来减少人工神经网络的复杂性
  13. 企业微信电脑版显示连不上服务器,钉钉环境部分Anroid手机,微信、企业微信pc版,登录失败的解决办法...
  14. 一次ibm服务器故障处理
  15. DDR SDRAM内存测试的一种官方方案(简单易懂)
  16. 2021年最新版Git一天入门教程
  17. GamesIndustry.biz采访尼古拉斯·弗朗西斯(Nicholas Francis)
  18. 我在哪?从何处来,又到哪里去?
  19. 小程序组件页面刷新问题
  20. 主流嵌入式操作系统(RTOS)有哪些?看看这14种

热门文章

  1. Mysql学习总结(9)——MySql视图原理讲解与使用大全
  2. linux只能用一半的内存,linux可用内存足够为什么还用swap
  3. style 里引用php变量,在VUE style中使用data中的变量的方法详解
  4. golang 线程 Java线程_Java线程只能有上千个,而Go的Goroutine能有上百万个
  5. 近似推断---变分线性回归
  6. 如何利用URLOS和云存储打造一个不惧怕宕机的网站环境
  7. Vue-router之集成
  8. 利用cookies实现对弹出窗口频率的控制
  9. Shell文本处理三剑客(三)
  10. Android长时间后台运行Service