JS高级:01.JavaScript解析与执行过程

372 阅读2分钟

1. js解析与执行过程介绍

js由浏览器动态解析,不同的浏览器对于js的解析有着微小的差别,不同的js解析引擎效率也有高低。

js执行过程分为两大部分:

  1. 解析过程(又称预编译阶段)。主要工作:对于js代码声明的所有变量和函数进行预处理,对变量与函数的处理仅为声明(初始化为undefined),并开辟出一段内存空间,不进行赋值操作。
  2. 执行过程。主要工作:浏览器的js引擎对每个代码块按照先后顺序执行。

js解析过程中遇到语法错误(使用中文冒号;括号不配对等等),会报错。预处理完成开始执行时,遇到执行时错误,报错代码行后面的代码将不会执行。

2. 全局预编译阶段

GO == window ✅

全局作用域中的预编译流程:(全局上下文)

  1. 创建GO对象
  2. 寻找全局作用域中的变量声明,将其放到最前面并赋值undefined,存储到GO对象中
  3. 寻找全局作用域中的函数声明,更新GO对象,若函数名与变量名相同,则变量名会被函数名覆盖,值为函数体

预编译完成后,按顺序执行全局作用域中的每一行代码。

3. 函数预编译阶段

  1. 创建AO(activation object)对象
  2. 寻找函数中的形参和变量声明,将其提前,赋值undefined,放到AO对象中作属性
  3. 把实参的参数值赋值给形参
  4. 寻找函数中的函数声明,并更新AO对象(存储(或赋值)给AO对象的属性)

预编译完成后,按顺序执行函数内每一行代码。

写完了,但感觉有点问题,待更新。。。