JS基本概念
- 单线程
- 动态、弱类型
- 面向对象、函数式
- 解释类语言、JIT
- 安全、性能差
- Browser进程
- GPU进程
- 渲染进程
- 插件进程、网络进程
渲染进程:
- GUI线程
- JS线程
- 事件触发线程
- 定时器触发线程
- 网络线程
作用域
- 全局作用域
- 函数作用域
- 块级作用域
变量提升
- var有变量提升
- let.const没有变量提升,提前访问会报错
- function函数可以先调用再定义
- 赋值给变量的函数无法提前调用
graph TD
源代码 --> AST --> 字节码 --> 机器码
当JS 引擎解析到可执行代码片段(通常是函数调用)的时候,就会先做一些执行前的准备工作,这个准备工作,就叫做“执行上下文(execution context 简称EC)”,也叫执行环境
全局执行上下文:代码开始执行时就会创建,将他压执行栈的栈底,每个生命周期内只有一份函数执行上下文:当执行一个函数时,这个函数内的代码会被编译,生成变量环境、词法环境等,当函数执行结束的时候该执行环境从栈顶弹出
词法环境:基于ECMAScript代码的词法嵌套结构来定义标识符和具体变量和函数的关联。一个词法环境由环境记录器和一个可能的引用外部词法环境的空值组成
变量环境:变量环境和词法环境的一个不同就是前者被用来存储函数声明和变量(let和const)绑定,而后者只用来存储var变量绑定
Outer:指向外部变量环境的一个指针
闭包
本质是一个没有被回收的对象,闭包内的内容不被回收,合理使用闭包
普通函数的this指向windows
1.对象调用指向对象
2. 先赋值再调用,看调用的地方
4.创建临时对象
5.将this指向临时对象
6.执行构造函数
7.返回临时对象