1. js解析与执行过程介绍
js由浏览器动态解析,不同的浏览器对于js的解析有着微小的差别,不同的js解析引擎效率也有高低。
js执行过程分为两大部分:
- 解析过程(又称预编译阶段)。主要工作:对于js代码声明的所有变量和函数进行预处理,对变量与函数的处理仅为声明(初始化为undefined),并开辟出一段内存空间,不进行赋值操作。
- 执行过程。主要工作:浏览器的js引擎对每个代码块按照先后顺序执行。
js解析过程中遇到语法错误(使用中文冒号;括号不配对等等),会报错。预处理完成开始执行时,遇到执行时错误,报错代码行后面的代码将不会执行。
2. 全局预编译阶段
GO == window ✅
全局作用域中的预编译流程:(全局上下文)
- 创建GO对象
- 寻找全局作用域中的变量声明,将其放到最前面并赋值undefined,存储到GO对象中
- 寻找全局作用域中的函数声明,更新GO对象,若函数名与变量名相同,则变量名会被函数名覆盖,值为函数体
预编译完成后,按顺序执行全局作用域中的每一行代码。
3. 函数预编译阶段
- 创建AO(activation object)对象
- 寻找函数中的形参和变量声明,将其提前,赋值undefined,放到AO对象中作属性
- 把实参的参数值赋值给形参
- 寻找函数中的函数声明,并更新AO对象(存储(或赋值)给AO对象的属性)
预编译完成后,按顺序执行函数内每一行代码。
写完了,但感觉有点问题,待更新。。。