js笔记(一)--邂逅Javascript

114 阅读5分钟

1. 编程语言所具备的特点

我们先搞清楚计算机语言和编程语言的关系和区别:

  1. 计算机语言:计算机语言(computer language)指用于人与计算机之间通讯的语言,是人与计算机之间传递信息的介质。但 是其概念比通用的编程语言要更广泛。例如,HTML是标记语言,也是计算机语言,但并不是编程语言。
  2. 编程语言:编程语言(英语:programming language),是用来定义计算机程序的形式语言。它是一种被标准化的交流技巧, 用来向计算机发出指令,一种能够让程序员准确地定义计算机所需要使用数据的计算机语言,并精确地定义在不同情况下所 应当采取的行动。
  3. 很抽象, 我们来说明一下编程语言的特点:
  • 数据和数据结构
  • 指令及流程控制
  • 引用机制和重用机制
  • 设计哲学

2. javaScript定义

  1. 维基百科对JavaScript的定义:
  • JavaScript(通常缩写为JS)是一种高级的、解释型的编程语言;
  • JavaScript是一门基于原型、头等函数的语言,是一门多范式的语言,它支持面向对象程序设计,指令式编程,以及函数式编程

3. javaScript历史

  1. 网景公司当时想要选择一种语言来嵌入到浏览器中:
  • 采用现有的语言,比如Perl、Python、Tcl、Scheme等等, 允许它们直接嵌入网页;
  • 1995年网景公司招募了程序员Brendan Eich,希望将Scheme语言作为网页脚本语言的可能性;
  • 就在这时,发生了另外一件大事:1995年Sun公司将Oak语言改名为Java,正式向市场推出;
  • Java推出之后立马在市场上引起了轰动,Java当初有一个口号:“write once run anywhere”;
  • 网景公司动了心,决定与Sun公司结成联盟,希望将Java嵌入到网页中来运行;
  • Brendan Eich本人非常热衷于Scheme,但是管理层那个时候有点倾向于Java,希望可以简化Java来适应网页脚本的需求;
  1. 但是Brendan Eich对此并不感兴趣,他用10天时间设计出来了JavaScript;
  • 最初这门语言的名字是Mocha(摩卡);
  • 在Navigator2.0 beta版本更名为LiveScript;
  • 在Navigator2.0 beta 3版本正式重命名为JavaScript,当时是为了给这门语言搭上Java这个热词;
  1. 当然10天设计出来语言足够说明Brendan Eich是天才,但是这门语言当时更像是一个多种语言的大杂烩;
  • 借鉴C语言的基本语法;
  • 借鉴Java语言的数据类型和内存管理;
  • 借鉴Scheme语言,将函数提升到"第一等公民"(first class)的地位;
  • 借鉴Self语言,使用基于原型(prototype)的继承机制。
  1. Brendan Eich曾经这样描述过JavaScript:
  • 与其说我爱Javascript,不如说我恨它,它是C语言和Self语言一夜情的产物;
  • 十八世纪英国文学家约翰逊博士说得好:'它的优秀之处并非原创,它的原创之处并不优秀。’ (the part that is good is not original, and the part that is original is not good.)

4. javaScript起源

1996年11月,网景正式向ECMA(欧洲计算机制造商协会)提交语言标准。

  • 1997年6月,ECMA以JavaScript语言为基础制定了ECMAScript标准规范ECMA-262;
  • ECMA-262是一份标准,定义了ECMAScript;
  • JavaScript成为了ECMAScript最著名的实现之一;
  • 除此之外,ActionScript和JScript也都是ECMAScript规范的实现语言;
  • 所以说,ECMAScript是一种规范,而JavaScript是这种规范的一种实现

5. JavaScript的组成

image.png

6. JavaScript由谁来运行?

  1. 我们经常会说:不同的浏览器有不同的内核组成
  • Gecko:早期被Netscape和Mozilla Firefox浏览器浏览器使用;
  • Trident:微软开发,被IE4~IE11浏览器使用,但是Edge浏览器已经转向Blink;
  • Webkit:苹果基于KHTML开发、开源的,用于Safari,Google Chrome之前也在使用;
  • Blink:是Webkit的一个分支,Google开发,目前应用于Google Chrome、Edge、Opera等;
  1. 事实上,我们经常说的浏览器内核指的是浏览器的排版引擎:
  • 排版引擎(layout engine),也称为浏览器引擎(browser engine)、页面渲染引擎(rendering engine)或样版引擎。
  1. 那么,JavaScript代码由谁来执行呢?
  • JavaScript引擎

7. 为什么需要JavaScript引擎呢?

  1. 我们前面说过,高级的编程语言都是需要转成最终的机器指令来执行的;
  • 事实上我们编写的JavaScript无论你交给浏览器或者Node执行,最后都是需要被CPU执行的;
  • 但是CPU只认识自己的指令集,实际上是机器语言,才能被CPU所执行;
  • 所以我们需要JavaScript引擎帮助我们将JavaScript代码翻译成CPU指令来执行;
  1. 比较常见的JavaScript引擎有哪些呢?
  • SpiderMonkey:第一款JavaScript引擎,由Brendan Eich开发(也就是JavaScript作者);
  • Chakra:微软开发,用于IT浏览器;
  • JavaScriptCore:WebKit中的JavaScript引擎,Apple公司开发;
  • V8:Google开发的强大JavaScript引擎,也帮助Chrome从众多浏览器中脱颖而出;

8. 浏览器内核和JS引擎的关系

  1. 这里我们先以WebKit为例,WebKit事实上由两部分组成的:
  • WebCore:负责HTML解析、布局、渲染等等相关的工作;
  • JavaScriptCore:解析、执行JavaScript代码;
  1. 小程序中也是这样的划分:
  • 在小程序中编写的JavaScript代码就是被JSCore执行的;

image.png