js预解析

本文探讨了JavaScript中的预解析和变量提升现象,通过实例分析了函数声明、变量定义在代码执行过程中的提升规则,以及如何影响函数内部作用域和变量的生命周期。预解析使得变量和函数在执行前被声明,而作用域链决定了变量在不同范围内的访问。文章通过一个经典的案例展示了如何理解和避免因变量提升导致的错误。

最近看到这个预解析,非常有意思,能够帮助我们更深刻的了解这个语言在浏览器中是怎么运行的。下面我们来通过几个小案例了解一下:

	// 预解析
		var num = 20;
		
		function fun1() {
			console.log(num);
			var num = 10;
			console.log(num);
		}

        fun1();

这个会在控制台打印出什么呢。我们来分析一下,首先进行预解析,直接将定义提起,即像下面这样运行代码。让我们来看看运行出什么结果吧。

	// 预解析
		var num;
		
		function fun1() {
            var num;
			console.log(num);
			num = 10;
			console.log(num);
		}

        num = 20;

        fun1();

undefined

10

 浏览器运行代码,一开始进来就找定义变量和函数,找到就直接提升到最前面。然后再逐句执行。根据作用域链,在函数体里面也会进行变量提升,然后逐句执行。这有一个经典案例,这个会得到一个什么结果呢?

fun1();
		
		console.log(c);
		console.log(b);
		console.log(a);
		
		function fun1() {
			var a = b = c = 9;
			console.log(a);
			console.log(b);
			console.log(c);
		}
// 相当于
		function fun1() {
			var a = 9;
			b = 9;
			c = 9;
			// var a = b = c = 9; 相当于 var a = 9; b = 9;c = 9;	并非相当于var a = 9, b = 9,c = 9;  里面没有var的变量为全局变量
			console.log(a);
			console.log(b);
			console.log(c);
		}
		fun1();
		console.log(c);
		console.log(b);
		console.log(a);

 所以这个控制台输出应该为9 9 9 9 9 报错未定义

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值