javascript笔记:javascript的前世,至于今生嘛地球人都知道了哈

  (引子:javascript其实是个私生子)我在上一篇博文最后说道,想写一篇关于javascript基础语法的文章,原因是我在读很多优秀的javascript源码时候常常被javascript诡异的语法搞的精疲力尽,所以时不时的加固javascript基础知识是十分有必要的,这些知识每次温故或者你换个角度去思考都能收获颇多,那么如此深不可测的语言是怎么诞生的呢?它的祖师爷在创造它的时候是基于什么思考的呢?我想如果大伙知道了这段历史,或许理解起javascript来就会感觉跟轻松些跟惬意些,说不定很多人因此而想好好的学习它。人总有点八卦的小毛病,回顾下一件事情或一个东西的历史,探寻他们历史过程中的种种有趣的细节,一定是件很有意思的事情,我想这篇文章应该会吸引很多人的眼球吧。

  大家看看下面这两张照片:

 

这位就是javascript的开山祖师爷:Bremdan Eich(布兰登·艾奇),现在在Mozilla公司担任CTO。(额头好长啊,又宽,要是希特勒在世一定会说这是太标准的雅利安人)。

  javascript的诞生于浏览器的鼻祖网景公司(Netscape),大约是1994年左右,网景公司(Netscape)发布了Navigator浏览器0.9版,这是一款很经典的浏览器,网景公司(Netscape)的用户数因此而出现了井喷的态势,但是Navigator0.9不具备和访问者互动的能力,在那个上网速度比蜗牛还慢的时代,网景公司(Netscape)急需一种脚本语言,使得浏览器和网页进行交互,从而提升用户的体验。

  针对这个问题,网景公司(Netscape)有两种选择,一是采用现有的脚本语言,二是自己发明一个新的脚本语言。当时网景公司(Netscape)的高层对这个问题争论不休。在这些喋喋不休的争论里,时间走到了1995年,这一年发生了一件创造历史的大事件我的本家语言java横空出世,java凭借“一次编写,到处运行的”强大宣传,大有未来主宰的霸气,这些让网景公司(Netscape)高层们一下子被java所俘获,如是网景公司(Netscape)和sun公司结盟,网景公司(Netscape)不仅允许java程序以applet的形式嵌入到浏览器,直接在浏览器里面运行,甚至还打算把java作为脚本嵌入到网页,只是最后发现网页会变的过于复杂而放弃,但是javascript的java印记永远都挥之不去。(这段历史读的我十分自豪,我虽然想以后远离一些java但是毕竟现在我还是一名java工程师)。

  事情的转折发生在1995年4月,网景公司(Netscape)录用了Bremdan Eich(布兰登·艾奇)(虽然Bremdan Eich(布兰登·艾奇),是javascript的祖师爷,但是他的介入或许也是javascript悲剧的开始)。我们还是接着说网景公司(Netscape)吧,1995年5月,网景公司(Netscape)做出了决策,未来的网页脚本语言必须看上去和java足够相似,但是比java简单,使得非专业的网页作者能很快的上手。

  Bremdan Eich(布兰登·艾奇)被任命为这个简化版的java的设计师。但是Bremdan Eich(布兰登·艾奇)对java一点兴趣都没有,为了应付公司的安排的任务,他只用10天时间就设计出了javascript。悲剧就这么诞生了。

  为什么Bremdan Eich(布兰登·艾奇)对java一点兴趣都没有了,大家接着往下读哈。

  Brendan Eich的主要方向和兴趣是函数式编程,网景公司招聘他的目的,是研究将Scheme语言作为网页脚本语言的可能性。Brendan Eich本人也是这样想的,以为进入新公司后,会主要与Scheme语言打交道。(没想到美国公司也有这样的恶习,我以前有家公司非常的BT,特别是对刚毕业或者工作时间不长的程序员,你想做java我偏偏不给你做,让你做C#,你想做C#,别天真,你去倒腾java,很多程序员就是这么被致残的)。

  10天诞生一种语言,不管怎么说我还是把Brendan Eich当神看。但是神创造世界也不能太一蹴而就了,我们这些凡夫俗子很多时候做个小功能模块如果领导就给你10天时间,也会叫苦连天的,10天诞生一种语言这不是神还是啥啊。由于javascript设计的时间实在太短,导致很多细节考虑不周,因此javascript写出的程序混乱不堪,成了许多程序员的梦魇,差点被人抛弃,直到ajax的出世,才让人们终于找到理由忍受他的畸形。 

  总的来说啊,Brendan Eich设计思路是这样的:

  1.借鉴C语言的基本语法;
  2.借鉴Java语言的数据类型和内存管理;
  3.借鉴Scheme语言,将函数提升到"第一等公民"(first class)的地位;
  4.借鉴Self语言,使用基于原型(prototype)的继承机制。
     所以,Javascript语言实际上是两种语言风格的混合产物(简化的)函数式编程+(简化的)面向对象编程。这是由Brendan Eich(函数式编程)与网景公司(面向对象编程)共同决定的。

  不管怎么说,javascript和java是有关系的,javascript里面有java的思想所以说javascript和java无关是不正确的。

  其实一直到现在Brendan Eich还是看不起讨厌java。假如不是公司决策Brendan Eich绝对不会把java作为javascript的设计原型,即使是现在,Brendan Eich还是讨厌自己的作品。他曾经说过:“与其说我爱Javascript,不如说我恨它。它是C语言和Self语言***的产物。十八世纪英国文学家约翰逊博士说得好:'它的优秀之处并非原创,它的原创之处并不优秀。”

  哎,可怜的javascript啊,不管你做的如何好,你就是一个永远不讨父亲喜欢的私生子啊!大家应该多多疼爱下他,他很需要大家的关怀啊。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/404865.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

gcc -E 产生预编译后的文件

利用gcc -E选项,可以得到预编译后的文件。这可以得到宏展开后的文件。 先来看看几个相关联的文件吧! #ifndef __DEFS_H__ #define __DEFS_H__#ifdef WIN32#define snprintf _snprintf #endif// Join two variables #define MACRO_JOIN( X, Y ) MACRO_DO_JOIN( X, Y…

[react] 在React中我们怎么做静态类型检测?都有哪些方法可以做到?

[react] 在React中我们怎么做静态类型检测?都有哪些方法可以做到? flow 个人简介 我是歌谣,欢迎和大家一起交流前后端知识。放弃很容易, 但坚持一定很酷。欢迎大家一起讨论 主目录 与歌谣一起通关前端面试题

STM32F4 使用STLink 和 EventRecoder 调试运行时间

最近使用STM32F407的DSP库,测试了一下浮点数1024个点的FFT计算时间,采用EventRecoder计时间,记录如下。 1、在Compiler中添加EventRecorder 组件,CMSIS的版本5.4。 2、main.C增加头文件:#include "EventRecorder…

道德经经典解读

老子说:上善若水。水善利万物而不争。 原著实录 《道德经》第8章:上善若水。水善利万物而不争,处众人之所恶,故几于道。居善地,心善渊,与善仁,言善信,政善治,事善能&…

_attribute_((packed))

From: http://blog.csdn.net/wesleyluo/article/details/7565165 _attribute_((packed)) 1. __attribute__ ((packed)) 的作用就是告诉编译器取消结构在编译过程中的优化对齐,按照实际占用字节数进行对齐,是GCC特有的语法。这个功能是跟操作系统没关系&#xff0…

制作centos安装u盘

制作centos安装u盘 格式化 mkfs.vfat /dev/sdb1 制作 dd ifCentOS-7-x86_64-Minimal-1503-01.iso of/dev/sdb # 1. 注意是/dev/sdb 不是/dev/sdb1 # 2. bios中将硬盘设置为AHCI模式 posted on 2015-10-23 11:28 北京涛子 阅读(...) 评论(...) 编辑 收藏 转载于:https://www.cnb…

[react] 怎么在JSX里属性可以被覆盖吗?覆盖的原则是什么?

[react] 怎么在JSX里属性可以被覆盖吗?覆盖的原则是什么? 会被覆盖,类似Object.assign,后面的覆盖前面的 个人简介 我是歌谣,欢迎和大家一起交流前后端知识。放弃很容易, 但坚持一定很酷。欢迎大家一起讨…

Keil5 EventRecorder 的STDOUT输出丢包率较大现象

采用STLINK EventRecorder 对printf进行重定义,在连续发送数据时,存在较大的丢包情况。因此,调试小数据量时可以采用这种方法,大数据量的时候还是直接用UART 进行输出。

使用 C++ 处理 JSON 数据交换格式

From: http://blog.csdn.net/xt_xiaotian/article/details/5648388 使用 C 处理 JSON 数据交换格式 一、摘要 JSON 的全称为:JavaScript Object Notation,顾名思义,JSON 是用于标记 Javascript 对象的,JSON 官方的解释为&#x…

Etherchannel的配置 三层

三层以太网通道 interface FastEthernet0/19 no switchport no ip address channel-protocol lacp channel-group 30 mode active ! interface FastEthernet0/20 no switchport no ip address channel-protocol lacp channel-group 30 mode active interface Port-chan…

[react] immutable的原理是什么

[react] immutable的原理是什么 使用字典树持久化数据结构,更新时可优化对象生成逻辑,降低成本 个人简介 我是歌谣,欢迎和大家一起交流前后端知识。放弃很容易, 但坚持一定很酷。欢迎大家一起讨论 主目录 与歌谣一起通关前端面…

CubeMx 生成的FreeRTOS 代码在ARM compiler6 编译__forceinline 报错的解决方法

一、问题 如题,CubeMx 生成的FreeRTOS 代码在ARM compiler6 编译__forceinline 报错的解决方法。 二、解决方法 第一种方法,将编译器换回default compiler version 5。 第二种方法,更换freeRTOS移植源码文件。 将FreeRTOS源码xxx\FreeRTOS…

解决centos KDE命令提示符和文字不紧贴的问题

注意此时cd后面是没有空格的但此时却显示像有空格的一样,要解决这个问题就需要修改PS1 在自己的home的目录下更改.bashrc 例如root就在/root下 PS1"\e[1;32m\u\e[m\e[1;33m\e[m\e[1;35m\h\e[m:\w\$ "转载于:https://www.cnblogs.com/597845634ds/p/490557…

UPS电源远程关机

UPS电源的APC软件是个单机PowerChute Business Edition 的,一个UPS电源上也不是一台服务器,如何在停电的时候把其它服务器也关了,难不成再去买网络版。Windows从xp以上就可以远程关机了,shutdown命令。PowerChute是以系统服务在后…

[react] 什么是React的实例?函数式组件有没有实例?

[react] 什么是React的实例?函数式组件有没有实例? React的实例:通过继承React.Component的类生成 函数式组件没有实例 个人简介 我是歌谣,欢迎和大家一起交流前后端知识。放弃很容易, 但坚持一定很酷。欢迎大家一…

安卓dalvik和art区别

Dalvik模式像是一台折叠自行车,每次骑之前都要组装后才能上路。而ART模式就是一个已经装好的自行车,直接就能上车走人。所以ART模式在效率上肯定是要好于Dalvik。 通过以上这种表格,我们可以直白的看出,全新的ART模式具备用RAM内存…

STM32 FreeRTOS USART DMA空闲中断和消息队列的使用

(后文有修改) 一、思路 USARTDMA空闲中断发生后,将接收到的DMA消息用消息队列发出去xQueueSendToFrontFromISR,FreeRTOS创建一个独立的任务一直等待接受消息队列。 DMA中断可以被FreeRTOS管理。 二、CubeMx配置驱动 2.1 USAR…

Samba服务全攻略

From: http://redking.blog.51cto.com/27212/120934 1 Samba原理 1.1 Samba概述 接触Linux我们听的最多的就是Samba服务,为什么Samba应用这么广泛哈~,原因是Samba最先在Linux和Windows两个平台之间架起了一座桥梁哈,正是由于Samba的出现&am…

VS2008 JS调试和Silverlight 后台代码调试 相互影响的问题。---自己做实例证明

但是有几点要注意。首先,不能在同一调试过程中调试托管代码和脚本。(即XAML。cs 和JAVASCRIPT) 这就是说,如果在XAML的隐藏代码中设置一个断点,并且已经打开了Silverlight调试,那么断点将发挥相应的作用然而…

[react] 如何提高组件的渲染效率呢?

[react] 如何提高组件的渲染效率呢? 类组件: 1、继承PureComponent 2、使用shouldComponentUpdate优化 函数组件: 1、memo模拟PureComponent 2、使用useMemo缓存变量 3、使用useCallback缓存函数 循环添加key,key最好用数组项的唯一值&…