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,一经查实,立即删除!

相关文章

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

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

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

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

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…

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是以系统服务在后…

安卓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…

FPGA+NIOS2 Verilog+C 实现一个计算器

用FPGA生成一个32位的MCU软核,生产相应的管脚和资源,在MCU里边用C完成计算器的逻辑和LCD1602、矩阵键盘的编写。2016年的古老存货。 一、硬件和开发环境 FPGA:EP4CE6E22C8 LCD1206液晶,4X4矩阵键盘。quartus 13project_FPGA_NO1…

FPGA Verilog实现一个脉冲波形变换

一、波形变换需求 二、思路 (1)脉冲边沿提取,得到波形的上升沿r_rise和下降沿r_fall (2)将上升沿r_rise延迟一节拍r_r_rise,r_rise更新上一周期的周期和脉宽并清空上一次的脉冲周期计数和脉宽周期计数&am…

STM32 DSP库的使用方法

一、工程中如何添加DSP库 在keil5软件中点击 Pack,CMISIS组件选择DSP资源,可以选择Source源码或者Library库导入到项目中,点击OK,可以在项目树中看到该资源已经导入了工程。 二、 如何使用DSP库 DSP库对浮点计算做了优化和增强&…

SharePoint 2010-随机出现的页面性能问题

有个客户, 服务器的配置巨牛, 24核CPU, 64GB内存, 这样的三台机器组成了一个SharePoint 2010的服务器场. 就是这样牛的配置, 出现了性能问题. 看performance log, 发现CPU, 内存都资源非常充裕, 问题发生的时候request/sec的值也非常的低. 问题发生的频率很低, 一天十次以内. …

iOS开发多线程篇—线程的状态

iOS开发多线程篇—线程的状态 一、简单介绍 线程的创建: self.thread[[NSThread alloc]initWithTarget:self selector:selector(test) object:nil]; 说明:创建线程有多种方式,这里不做过多的介绍。 线程的开启: [self.thread star…

Qt 编写应用程序升级的配置文件json 生成工具

通过此工具将需要更新的应用程序和相关目录下的依赖文件配置成json格式的升级文件,客户端版本监控软件通过读取此json文件,对比相应字段,实现自动拉取文件,从而保证客户端应用程序自动更新。 此json文件放在待升级的exe同级目录下…

以太网供电新标准POE+,IEEE802.3at解析

以太网供电新标准POE,IEEE802.3at解析 以太网供电新标准POE,IEEE802.3at一、IEEE 802.3at标准出现的背景为了遵循IEEE 802.3af规范,受电设备(PD)上的PoE功耗被限制为12.95W,这对于传统的IP电话以及网络摄像头而言足以满足需求&am…

KEIL ARM 6.12 compiler 编译__ASM 错误的解决方法

1、问题 KEIL compiler 设置为 “use default compiler version 5” 可以正确编译以下汇编和C混合代码,更改编译器为V6.12后不识别__ASM关键字,并对汇编语法报错。 替换为 __ASM void MSR_MSP(uint32_t addr) {MSR MSP, r0 BX r14 } 2、解决办法 6.12…

JIURL文档-Linux的虚拟内存与分页机制(x86-64位)(一)

作者:JIURL日期:2015年10月30日分页机制Linux(x64CPU)使用基于分页机制的虚拟内存。每个进程有256TB(48位)的虚拟地址空间。基于分页机制,这256TB地址空间的一些部分 被映射了物理内存&#xff…

STM32 设置片外SRAM分散加载

STM32F407 通过FSMC外挂一片SRAM 容量1MB, 设置应用程序的中的超大数组存放在外部SRAM。 (1)首先通过设置FSMC,保证正确挂接SRAM。 (2)MDK设置 (3)应用程序用__attribute__指定需要…

.NET4.0 之 Dynamic VS Refle“.NET研究”ction 效率

在我先前的文章中,不断的推广.NET4.0新特性。特别是.NET4.0 Dynamic 这个新特性。随之而来的问题也出现了—Dynamic 执行效率如何? 我们做开发的不光需要代码简洁,能够希望自己能够写出好的架构。还有一点非常重要的就是,我们的写…