今天学习的是深入理解 JS,以下是课程结构。
- JS 的基本概念
- JS 是怎么执行的
- JS 的进阶知识点
- 课程总结
JS 的基本概念
- 借鉴 C 语言的基本语法
- 借鉴 Java 语言的数据类型和内存管理
- 借鉴 Scheme 语言,将函数提升到“第一等公民”的地位
- 借鉴 Self 语言,使用基于原型(prototype)的继承机制
JS 的特点
- 单线程
- 动态、弱类型
- 面向对象、函数式
- 解释类语言、JIT
- 安全、性能差
JS 的数据类型
- 对象
- 数组
- 函数
- ...
- 基础类型
- 字符串
- undefined
- 数字
- null
- symbol
- bigint
- 布尔
JS 的作用域
变量的可访问性和可见性
静态作用域,通过它就能够预测代码在执行过程中如何查找标识符。
JS 变量提升
- var 有变量提升
- let、const 没有变量提升,提前访问会报错
- function 可以先调用再定义
- 赋值给变量的函数无法提前调用
JS 是怎么执行的
当 JS 引擎解析到可执行代码片段的时候(通常是函数调用),就会先做一些执行前的准备工作,这个准备工作,就叫做“执行上下文”,也叫执行环境。
- 全局执行上下文:代码开始执行时就会创建,将它压到执行栈的栈底,每个生命周期内只有一份。
- 函数执行上下文:当执行一个函数的时候,这个函数内的代码会被编译,生成变量环境,词法环境等,当函数执行结束的时候该执行环境从栈顶弹出
- 词法环境:基于 ECMAScript 代码的词法嵌套结构来定义标识符和具体变量和函数的关联,一个词法环境由环境记录器和一个可能的引用外部词法环境的空值组成。
- 变量环境:变量环境和词法环境的一个不同就是前者被用来存储函数声明和变量(let、const)绑定,而后者只用来存储 var 变量绑定。
- Outer:指向外部变量环境的指针