一、JavaScript发展历程

1. 诞生

​ JavaScript因互联网而生,紧跟浏览器的发展而发展。

​ 1990年,欧洲核能研究所(CERN)科学家在互联网(Internet)基础上,发明了万维网(World Wide Web),从此可以再网上浏览网页文件。(互联网是线路、协议以及通过TCP、IP协议实现数据电子传输的硬件和软件的集合体。Internet提供的主要服务有万维网WWW、文件传输FTP、电子邮件E-mail、远程登录Telnet等。万维网则存在于互联网之上,是由无数个网络站点和网页集合而成,构成了因特网主要的部分。如果把互联网看成是基础,万维网就可以被看成是对互联网的应用

​ 1992年,美国国家超级电脑应用中心(NCSA)开发了人类历史上第一个浏览器Mosaic。

​ 1994年,NCSA的程序员联合一个风投家成立Mosaic通信公司,后来更名为Netscape。开发面向普通用户的新一代浏览器Netscape Navigator1.0版,市场份额一举超过90%。

​ Netscape公司很快发现,浏览器需要一种可以嵌入网页的脚本语言来控制页面行为。因为那时网速很慢而且网费很贵,有些操作不需要在服务端完成,可以把这些操作在浏览器端完成,从而提高效率。他们对这项脚本语言的设想是:功能不需要太强,语法简单,容易学习和部署。 恰逢Sun公司java问世,两家公司强强联合,NetScript公司希望借助Java语言的声势,Sun公司则将自己的影响力扩展到浏览器,1995年,他们雇佣程序员十天时间就设计完成了这种语言的第一版,命名为JavaScript,对外宣称JavaScript是Java的补充。

  • 基本语法:借鉴C语言和Java语言更多Java教程可以关注小编+转发文章+私信【架构资料】获取,最后祝大家都能拿到自己心仪的offer
  • 数据结构:借鉴Java语言,包括将值分为原始值和对象两大类
  • 函数用法:借鉴Schema语言和AWK语言,引入闭包
  • 原型继承模型:借鉴Self语言
  • 正则表达式:借鉴Perl语言
  • 字符串和数组处理:借鉴Python语言

2. JavaScript与Java的关系

​ JavaScript的基础语法和对象体系,是模仿Java而设计的。

​ JavaScript语言的函数是一种独立的数据类型以及基于原型对象的继承链,是与java语法最大的两点区别。

​ JavaScript不需要编译,由解释器直接执行。

3. JavaScript与ECMA的关系

​ 1996年,微软模仿JavaScript开发了一门相近的语言JScript,内置于IE3.0,Netscape公司面临丧失浏览器脚本语言的主导权局面。胳膊拗不过大腿,Netscape又找了个大哥-国际标准化组织ECMA(European Computer Manufacture Association)来抵抗微软。

​ 1997年,ECMA组织发布262号标准文件(ECMA-262),里面规定了浏览器脚本语言的标准,并将这种语言成为ECMAScript。

4. JavaScript的版本

​ 1997年,ECMAScript 1.0发布。

​ 1998年,ECMAScript 2.0发布。

​ 1999年,ECMAScript 3.0发布。

​ 2007-2009年,ECMAScript 4.0草案发布,对3.0版本做了大幅升级,但是草案过于激进,各方发生严重分歧,中止4.0的开发,将其中涉及现有功能改善的一小部分,发布为ECMAScript 3.1,会后不久,改名为ECMAScript 5。

​ 2011年,EMAScript 5.1发布,并成为ISO国际标准,到了2012年,所有主要浏览器都支持ECMAScript 5.1的全部功能。

​ 2013-2015年,讨论发布ECMAScript 6,并于2015年正式发布ECMAScript 6,更名为ECMASCript 2015。

5. 拓展-因特网标准制定(RFC)

  • 因特网草案(Internet Draft)
  • 建议标准,从这个阶段开始就成为RFC文档(Proposed Standard)
  • 草案标准(Draft Standard)
  • 因特网标准(Internet Standard)

二、JavaScript模块化发展历程

​ 模块化是指把一个复杂的系统分解到一个一个的模块,优点有:

​ ①代码复用,更方便的进行代码管理,同时方便于后面代码的修改和维护

​ ②一个单独的文件就是一个单独的模块,一个单独的作用域。只向外暴露特定的变量和函数,可以避免污染全局变量。

1. 无模块化

​ Ajax出现之前,JS更多的用来在网页上进行表单验证,实现简单的动画效果。

​ 2006年,ajax的概念被提出,前端拥有了主动向服务端发送请求并操作返回数据的能力,传统的网页慢慢向“富客户端”发展。前端的业务逻辑越来越多,代码也越来越多,于是一些问题就暴露出来:

  • 全局变量的冲突
  • 函数命名冲突
  • 依赖关系不好管理

​ 总结下要出场的“模块化”这个概念需要解决哪些痛点:

  • 如何安全的包装一个模块的代码?不污染模块外的任何代码
  • 如何唯一标示一个模块?
  • 如何优雅的把模块的API暴露出去?不增加全局变量
  • 如何方便的使用所依赖的模块?

2. CommonJS

​ 2009年,nodejs横空出世,开创了一个新纪元,人们可以使用js来编写服务端的代码。

​ CommonJS模块规范主要分为三部分:模块引用(require)、模块定义(export)、模块标示(module)

  • 模块标示应遵循统一的规则
  • 定义全局函数require,通过该标示来引入其他模块,执行的结果即为其依赖模块暴露出来的API,如果引入模块中也包含相关依赖,则依次加载这些依赖,如果引入模块失败,则require函数应报一个异常
  • 模块通过变量export来定义自身同时向外界暴露自己,export只能是一个对象,暴露的API即为此对象的属性

​ 每个文件就是一个模块,有自己的作用域。每个模块内部,module变量代表当前模块,是一个对象,它的exports属性是对外的接口。module.exports属性表示当前模块对外输出的接口,其它文件加载该模块,实际上就是读取module.exports变量。

​ require命令用户加载模块文件。

3. AMD

​ AMD(Asynchronous Module Definition)意思就是“异步模块定义”。它采用异步方式加载模块,模块的加载不影响它后面语句的执行。所有依赖这个模块的语句,都定义在一个回调函数中,等到加载完成之后,这个回调函数才会运行。

​ AMD也采用require语句加载模块,但是不同于CommonJS,它要求两个参数:

require([module],callback)

​ 第一个参数[module],是一个数组,里面的成员就是要加载的模块;第二个参数callback,则是加载成功之后的回调函数。

​ Layui中的JavaScript采用的便是AMD规范。

layui.use(['laydate', 'layer', 'table', 'upload', 'slider'], function(){})

​ AMD是RequireJS的产出,可以异步加载JS文件,是一个依赖前置、异步定义的框架。

4. CMD

​ CMD(Common Module Definition)通用模块定义,其提供了模块定义和按需执行加载模块。该规范明确了模块的基本书写格式和基本的交互规则。

​ CMD没有依赖前置,通过require加载JQuery插件,依赖就近,在什么地方使用到插件就在什么地方require该插件,即用即返,这是一个同步的概念。

//CMD
define(function(require, exports, module) {   let a = require('./a'); a.doSomething();···let b = require('./b'); // 依赖可以就近书写   b.doSomething();...
})// AMD 默认推荐的是
define(['./a', './b'], function(a, b) { // 依赖必须一开始就写好    a.doSomething()   ...b.doSomething()   ...
})

5. ES6

​ CommonJS用于服务器,AMD用于浏览器,ES6在语言标准的层面上,实现了模块功能,而且实现得相当简单,完全可以取代CommonJS和AMD规范,成为浏览器和服务器通用的模块解决方案。ES6模块的设计思想是尽量的静态化,使得编译时就能确定模块的依赖关系,以及输入和输出的变量。CommonJS和AMD模块,都只能在运行时确定这些东西。

​ ES6模块不是对象,而是通过export命令显式指定输出的代码,再通过import命令输入。

import { stat, exists, readFile} from 'fs';

​ 上面代码的实质是从fs模块加载三个方法,其它方法不加载。这种加载称为“编译时加载”或者静态加载,即ES6在编译时就能完成模块加载,效率比CommonJS模块的加载方式高。

JavaScript的发展史相关推荐

  1. Javascript是什么,能干什么、JavaScript的发展史、JavaScript的使用、方式一:内部引用、方式二:外部引用、程序设计的基础、数据类型与变量、运算符

    Javascript是什么,能干什么 一个网页的结构,是通过html决定的 脑袋,手脚,身体 Css决定了这个网页的样式 是高还是矮,是胖还是瘦,是黑还是白 这个网页的行为是通过JavaScript决 ...

  2. JavaScript的发展史及其应用领域

    1.JavaScript发展史 1.1 Nombas 和 ScriptEase 大概在 1992 年,一家称作 Nombas 的公司开发了一种叫做 C 减减(C-minus-minus,简称 Cmm) ...

  3. JavaScript是什么?能做什么?一篇文章带你了解JavaScript的发展史、组成及作用

    JavaScript是什么?能做什么? JavaScript(简称JS)是当前非常流行.应用很广泛的脚本语言, JavaScript 是 web 开发者必学的三种语言之一 js的主要特点是: 一.js ...

  4. JavaScript语言发展史

    JavaScript伴随着互联网的发展一起发展.互联网周边技术的快速发展,刺激和推动了JavaScript语言的发展. 1996年,样式表标准CSS第一版发布. 1997年,DHTML(Dynamic ...

  5. 为什么JavaScript现在和将来都是编程语言首选?

     为什么JavaScript现在和将来都是编程语言首选? 为什么JavaScript现在是将来也是程序员的第一选择?软件行业在不断发展,许多语言在过去几年还是流行前沿,但是在今天却已经显得冗余或者 ...

  6. 想听世界上最懂 JavaScript 的人和你讲JavaScript 吗?

    时至今日,JavaScript 对前端工程师的重要性已无需多言.甚至有些同学已经达到了通读语言标准,对 ECMA-262 规范熟捻于心的水平. 然而即便如此,很多同学仍然将编程语言作为一种源自权威的. ...

  7. JavaScript基础(详细总结)

    目录 1.JavaScript简介 1.2.JavaScript的发展史 1.3.JavaScript的功能 1.4.JavaScript的特点 1.5.JavaScript组成 2.JavaScri ...

  8. JavaScript 深入学习教程

    博主个人教程地址 JavaScript教程地址 前言 这篇文章就是介绍一下JavaScript的课程内容 具体请看视频教程 想要学习的话 此后不再更新这个文本版本教程 前端基础部分都不在更新文字版本 ...

  9. 前端18个月难度翻番?来这里把握大前端技术本质进展丨稀土开发者大会

    图片来源:pexels.com "别更新了,学不动了"向来是前端开发群体的切肤之痛: React 还没学明白,Vue 就出来了: Vue 2.0 还没上手,3.0 就发布了: No ...

  10. JS+BOM+DOM汇总

    文章目录 前言:JavaScript的发展史 第一章:BOM 1.1.概念 1.2.组成:window.Navigator.Screen. History.Location 1.3.方法 第二章:DO ...

最新文章

  1. Python字节码介绍
  2. 解读《电力发展“十三五”规划》
  3. mybatis log4j打印sql
  4. 浅谈Linux中的信号处理机制(三)
  5. 单例模式【SingletonPattern】
  6. Unity3D 与 objective-c 之间数据交互。iOS SDK接口封装Unity3D接口
  7. Linux什么时候在pc机上有一席之地
  8. 服务器oracle优化,oracle服务器配置及优化
  9. 计算机系统维护是学什么,《计算机系统维护》教学大纲.doc
  10. 二次型在一点的_EP型隐形车衣除胶剂的使用方法,为什么不建议用柏油清洗剂...
  11. 面试题之接口和抽象类的区别
  12. webstorm使用指南
  13. js替换a标签href
  14. 小米6刷android 8.0,小米6可以吃奥利奥了,抢先刷安卓8.0
  15. jn5168烧写方法
  16. 【用友T3】创建账套
  17. 深度解析dubbo网络传输层Transporter
  18. 利用URL地址实现页面间传输数据和获取数据
  19. FFmpeg源代码简单分析-其他-AVClass和AVoption
  20. 自控实验——直流电机转速设计实验报告

热门文章

  1. CAJViewer安装报错卸载报错打开报错解决流程
  2. PHPExcel导出出现白页
  3. 苹果手机删除计算机怎么恢复出厂设置密码,教你如何解决忘记ipad删除恢复出厂设置密码...
  4. 90后新晋父母的根据地——万物心选
  5. Inno Setup 为程序创建桌面快捷方式
  6. 《巴菲特的第一桶金》读书笔记
  7. VMware虚拟机启动失败:“DevicePowerOn”
  8. php中case的使用,php:switchcase语句的使用案例
  9. 开发者的固化思维及解决办法
  10. 【Qt】无法定位程序输入点 于动态链接库