JS中的预编译

JS之预编译(详解)

JS运动过程:

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

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

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

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

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

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

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

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

请看下面这个例子:

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(){} //函数体
 }

接下来就是函数执行,函数执行要按照顺序来,也就是一行一行的执行。
————————————————
版权声明:本文为CSDN博主「oito」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/wls666/article/details/88872212

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值