您的位置:首页 > 其它

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

2018-03-26 10:39 309 查看
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;不可改变
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: