深入理解JS
JS的基本概念
- 借鉴C语言的基本语法
- 借鉴Java语言的数据类型和内存管理
- 借鉴Scheme语言, 将函数提升到"第一等公民"( first class) 的地位 4.借鉴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
- 安全、 性能差
- ……
JS的数据类型
对象:数组、函数、。。。 基础类型:字符串、数字、布尔。。。
变量提升
- var有变量提升
- let、 const没有变量提升, 提前访问会报错
- function函数可以先调用再定义
- 赋值给变量的函数无法提前调用
作用域
变量的可访问性和可见性 静态作用域, 通过它就能够预测代码在执行过程中如何查找标识符
闭包
垃圾回收
- 垃圾标记
- 对象复制
- 区域反转
执行
当 JS 引擎解析到可执行代码片段( 通常是函数调用)的时候, 就会先做一些执行前的准备工作, 这个准备工 作, 就叫做“ 执行上下文( execution context 简 称EC ) ” , 也叫执行环境
• 全局执行上下文: 代码开始执行时就会创建, 将他压执行栈的栈底, 每个生命周期内只有一份
• 函数执行上下文: 当执行一个函数时, 这个函数内的代码会被编译, 生成变量环境、 词法环境等, 当
函数执行结束的时候该执行环境从栈顶弹出
• 词法环境: 基于 ECMAScript 代码的词法嵌套结构来定义标识符和具体变量和函数的关联。 一个词法
环境由环境记录器和一个可能的引用外部词法环境的空值组成
• 变量环境: 变量环境和词法环境的一个不同就是前者被用来存储函数声明和变量( let 和 const) 绑定,
而后者只用来存储 var 变量绑定
• Outer: 指向外部变量环境的一个指针