关于js预编译、声明提前的有趣现象

关于js,大家都知道js是一门单线程的解释性语言,解释性语言就是指一句一句执行的语言。

js在执行前会先预编译下,简单点说就是扫描js代码,对要声明变量的声明,提前的提前!
接下来就讲一下预编译的四部曲:

  1. 创建AO对象
  2. 找到形参和变量声明,将变量和形参名作为AO属性名,值为undefined
  3. 将实参值和形参统一(赋值)
  4. 在函数体里面找函数声明,值赋值函数体

从上面的步骤可以看出,函数声明是最后的,相当于优先级最高,现在来看看一些有趣的题目:

cosole.log(a); //undefined
var a;
function test(a){
	console.log(a);//function a(){}
	var a=123;
		console.log(a);//123
	function a(){}
		console.log(a);//123
}
test(1);

预编译的四部曲分析一下:

		AO(全局):{
				a:undefined,
				test:undefined
		}
		
		AO(局部/函数内)	{
				a:undefined-->1-->function a(){}
		}

按照这样的规律去分析的话,一些看起来吓人的面试题也就能解决了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值