ES6 let const块级作用域以及ES5 var声明对比

本文探讨了JavaScript中变量的作用域规则,包括var、let和const声明的区别,以及变量提升现象。通过具体代码示例解释了全局作用域、函数作用域和块级作用域的概念,并展示了不同声明方式对变量可见性和生命周期的影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

for(var i = 0; i < 10; i++) {
				var bar = i;
			}
			console.error(bar, i) //9,10  i是全局变量

			for(var j = 0; j < 10; j++) {
				let _bar = j; //let 声明将变量_bar默认绑定到自己外面的{}作用域中,但是下面的var声明变量还是全局的
				var bb = j;
			}
			//			for(var j = 0; j < 10; j++) {
			//				{
			//					let _bar = j; //和上面的等价
			//					var bb = j;
			//				}
			//			}
			console.error(bb) //9
			//console.log(_bar)  出错undefined

			if(true) { //隐式声明
				let a = 12;
			}
			if(true) { //显式声明
				{
					//console.log("aaaa",aaaa) 块级作用域,无法变量提升
					let aaaa = 13;
					//					console.log(xxx)
					const xxx = 33;
					var xxxx = 4;
				}
			}
			console.log(xxxx) {
				var bb = 3;
			}
			console.error(bb) //3
			for(let j2 = 0; j2 < 10; j2++) {
				let _bar2 = j2; //let 声明将变量_bar默认绑定到自己外面的{}作用域中,但是下面的var声明变量还是全局的
				var bb2 = j2;
			}
			//console.error(j2)//无法访问到j2  for循环里面用let定义了
			console.log(bb2) //可以访问到

			//	{
			//		let j2;
			//		for(j2=0;j2<10;j2++){
			//			let _bar2 = j2;//每次迭代重新绑定  等价于上面的代码
			//		}
			//}
			const t = {}; //定义的变量无法改变,引用类型就行指向对象的地址,不可以再指向其它地址了。但是可以改变对象的属性
			//const 和let一样同样是块级声明
			//t = {};  出错
			t.a = 123; //可以改变
			console.error(t)
			const t2 = 123;
			//t2 = 456;不可改变



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值