重温JavaScript预编译的四个步骤

JS是解释型语言,运行过程分三步:

一、语法分析(检查代码是否存在语法错误);

二、预编译(代码执行之前,在内存中开辟空间,存放变量与函数);  

三、解释执行(执行JS代码);

理解预编译的过程,对于理解作用域链、闭包、this指向、原型链至关重要,它们是相辅相成的。

预编译分为四步:

1、创建AO对象

就是隐式的创建一个AO(Activation Object)空对象。

2、查找形参和变量声明,将形参名和变量名作为AO对象的属性,值为undefined

注意此处是变量声明(必须带var),只是查找形参名和变量声明名不赋值。

3、将形参与实参统计

即修改AO对象中属性名为形参的值为传入的实参,如果没有形参此步略过。

4、查找函数声明,函数名作为AO对象的属性,函数体作为的值

此处是函数声明,而非匿名函数和函数表达式。

总结:预编译过程就是查找变量声明、形参和函数声明的过程,并不初始化赋值,在解释执行阶段才会进行初始化 。

原文地址:https://www.cnblogs.com/splendid/p/10248157.html