JavaScript预编译复习整理

111 阅读2分钟

「这是我参与11月更文挑战的第16天,活动详情查看:2021最后一次更文挑战

定义:

JavaScript预编译是JavaScript内部执行的一个阶段

JavaScript是一门解释性语言,既编译完一段代码,执行一段代码

在内部具体执行时,大致有三个阶段:

1.语法分析

在进行代码运行时,会先扫描整个代码,查看是否有语法错误

2.预编译

在内存中开辟一些空间,存放一些变量与函数

3.解释执行

执行JavaScript代码

规则:

1.函数声明整体提升: 函数声明不管在哪个位置,系统总是会把声明提升到逻辑的最前面,因此无论函数调用在声明前或声明后结果都一样

2.变量声明提升: 会把变量的声明提升到函数调用前面

步骤:

预编译分为全局预编译和局部预编译(函数预编译),全局预编译发生在页面加载完成时执行,而局部预编译发生在函数执行的前一刻,二者都会先声明变量赋值,然后再声明函数赋值

全局预编译:

  1. 创建GO对象(Global Object),也就是全局对象。
  2. 找变量声明,将变量声明作为GO对象的属性名传进去,值为undefined
  3. 找函数声明,作为GO属性,值赋予对应的GO属性值

局部预编译:

  1. 创建AO对象(Activation Object)执行期上下文
  2. 找出形参和变量声明,将变量和形参名作为AO属性名,值为undefined
  3. 将实参值和形参统一
  4. 在函数体里面找函数声明,值赋予函数体

补充:

涉及JavaScript预编译比较多的就是变量提升了,简单说下几个规则:

  1. 只有声明的变量会提升,初始化的不会
  2. 函数及变量的声明都将被提升到函数的最顶部,而且不会被赋值
  3. 变量可以在使用后声明,也就是变量可以先使用再声明
  4. 提升先提升函数,然后提升变量