- 代码执行分为编译阶段和执行阶段(当执行全局代码 遇到函数时,也会先对函数进行编译,然后再执行)
- 编译阶段:
- js代码经过编译后,会生成两部分内容:执行上下文和可执行代码
- 创建执行上下文由三部分组成:即This Binding、VariableEnvironment(变量环境组件)、LexicalEnvironment(词法环境组件)
- This Binding即this的指向
- 变量环境组件VariableEnvironment 保存着 var声明的变量和函数function、并且变量初始化值为undefined
- 词法环境组件Lexical Environment 保存着let、const声明的变量和函数
- js引擎会把声明以外的代码编译为字节码,作为可执行代码
- 执行阶段:
- 执行代码时,遇到变量或者函数,会到执行上下文所保存的变量环境组件VariableEnvironment 或者LexicalEnvironment词法环境组件查找