函数预编译过程和案例分析

函数预编译过程和案例分析

JS代码执行步骤

1语法分析(即通篇扫描所有代码)如果有明显的语法错误 直接报错,不执行所有的代码

2预编译

3解释执行(边解释边执行)

预编译过程

案例一:

 function fn(a,b){
    console.log(a);
    var a = 99;
    console.log(a);
    
    function a(){};
    console.log(a);
    
    var b = function(){};
    console.log(b);
    
    function c(){};
 }
 
 fn(6);

1创建AO对象,执行期上下文(后面更新关于执行期上下文详解)。

AO{
}

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

AO{
	a:undefined
	b:undefined
}

3将形参和实参相统一,即更改形参后的undefined为具体的形参值。

AO{
	a:6
	b:undefined
}

4寻找函数中的函数声明,将函数名作为AO属性名,值为函数体。

AO{
	a: function a(){};
	b:undefined
	c: function c(){};
}

预编译结束,开始执行代码

 function fn(a,b){
 
    console.log(a);//此时输出的是 function a(){};
    var a = 99;//重新对a赋值
    console.log(a);//因此此时输出为99
    
    function a(){};//预编译环节已经提出,故执行时不在看这行代码
    console.log(a);//因此此时输出为99
    
    var b = function(){};//此步骤是把function(){};赋给b
    console.log(b);//输出function(){}
    function c(){};
    
 }
 fn(6);
**升级案例 :**
function f1(){
			function f2 (){
				function f3 (){

				}
				f3();
			}
			f2();
		}		
		f1();
		

预编译导图
预编译导图

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值