JS的基本概念
诞生:1995年,Brendan Eich开发
- 借鉴C语言的基本语法
- 借鉴Java语言的数据类型和内存管理
- 借鉴Scheme语言,将函数提升到“第一等公民”(first class)的地位
- 借鉴Self语言,使用基于原型(prototype)的继承机制
发展
- Mocha →1995.9 LiveScript → 1995.12 JavaScript
- 1997年6月,第一版ECMAScript发布
- 1999年12月,第三版ECMAScript发布
- 2009年12月,第五版ECMAScript发布
- 2009年,Ryan 创建了Node.js
- 2010年,Isaac基于node.js写出了npm
- 2015年6月,第六版ECMAScript发布
- 单线程
- 动态、弱类型
- 面向对象、函数式
- 解释类语言、JIT
- 安全、性能差
- var有变量提升
- let、const没有变量提升,提前访问会报错
- function函数可以先调用再定义
- 赋值给变量的函数无法提前调用
JS是怎么执行的
源代码 -->(词法分析 语法分析) AST --> 字节码
字节码 -->(编译执行)机器码
字节码 -->(逐行解释执行)机器码
当JS引擎解析到可执行代码片段(通常是函数调用)的时候,就会先做一些执行前的准备工作,这个准备工作,就叫做”执行上下文(execution context 简称 EC)”,也叫执行环境。
- 词法环境:基于ECMAScript代码的词法嵌套结构来定义标识符和具体变量和函数的关联。一个词法环境由环境记录器和一个可能的引用外部词法环境的空值组成
- 变量环境:变量环境和词法环境的一个不同就是前者被用来存储函数声明和变量(let和const)绑定,而后者只用来存储 var变量绑定
- Outer:指向外部变量环境的一个指针
JS的进阶知识点
闭包
to-do
this
- 普通函数的this指向window
- 对象调用指向对象
- 先赋值再调用,看调用的地方
- 创建临时对象
- 将this指向临时对象
- 执行构造函数
- 返回临时对象
垃圾回收
to-do
事件循环
to-do