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;不可改变
ES6 let const块级作用域以及ES5 var声明对比
最新推荐文章于 2022-11-11 09:28:52 发布