wlswang

JS运动过程:

  1. 语法分析
  2. 预编译
  3. 解释执行

语法分析就是JS引擎去检查你的代码是否有语法错误,解释执行顾名思义就是执行你的代码。当然最重要的还是预编译,那么预编译是在什么时候开始发生呢?,接下来就是重点了。

首先要明白什么是函数声明?,什么是变量赋值?

function a() //函数声明
var a = function (){}//变量赋值(函数表达式)

预编译(函数执行的前一刻):

  1. 创建AO对象(Activation Object)(执行上下文);

  2. 找函数形参和函数内变量声明,将形参名和变量名作为AO对象的属性名,值为undefined;

  3. 将实参值和形参统一,实参值赋给形参;

  4. 在函数体里面找函数声明,值赋予函数体。

请看下面这个例子:
function fn(a){
 	console.log(a);
 	var a = 123;
 	console.log(a);
 	function a() {} //函数声明
 	console.log(a);
 	var b = function(){}//变量赋值(函数表达式)
 	console.log(b);
 	function d(){}//函数声明
 }
 fn(1);

输出结果:

在这里插入图片描述
解题步骤:

第一步:声明一个AO对象(Activation Object)(执行上下文),执行上下文就是由于这个函数执行产生的一个存储空间库;

AO{

}

第二步: 找函数形参和函数内变量声明,将形参名和变量名作为AO对象的属性名,值为undefined;

AO{
	a:undefined,   //形参a
	b:undefined  //变量b
}

第三步:将实参值和形参值统一(也就是说把实参值传到形参中)

AO{
	a:1,//形参a
	b:undefined //变量b
}

第四步:在函数体里面找函数声明,值赋予函数体

AO{
 	a:function a(){}, //函数体
 	b:undefined, //变量b
 	d:function b(){} //函数体
 }

接下来就是函数执行,函数执行要按照顺序来,也就是一行一行的执行。

分类:

技术点:

相关文章:

  • 2022-03-08
  • 2022-12-23
  • 2021-10-15
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2021-05-14
  • 2021-09-09
  • 2021-06-13
  • 2021-06-08
  • 2021-09-18
相关资源
相似解决方案