let和var的一些总结

let作用于"当前"块级作用域,var声明的变量实际是挂在全局变量window下的,下面几个例子方便更好的理解:
 
demo0:
//块级作用域
{
var a = 1;
let b = 2;
}
 
console.log(a);//会正常打印
console.log(b);//会被提示undefined

demo1:
//块级作用域
if(true){
    var a = 1;
    let b = 2;
}
//类似的,for语句等均为块级作用域
 
console.log(a);//会正常打印
console.log(b);//会被提示undefined

demo2:
//不是块级作用域
function f() {
    console.log("执行f方法");
    var c = 3;
    console.log("f中的c="+c);
}
f();
console.log(c);//会被提示undefined
 
 

 demo3:
//块级作用域
for (var i=0;i<4;i++){
    console.log(i);
}
console.log(i);//这里会打印出4

//块级作用域
for (var i=0;i<4;i++){
    console.log(i);
}
console.log(i);//这里会打印出4

for(i=i;i<10;i++){
    console.log(i);
}

 

 

let不能重新声明一个变量,而var可以,let由此也可以推出,它是不可以变量提升的,而var可以。

demo4:

let a = '你好';
let a;//此处报错:Uncaught SyntaxError: Identifier 'a' has already been declared
console.log(a);

demo5:

var a = '你好';
var a;//如此写法,一点儿毛病都没有
console.log(a);

 暂存死区:

let a = "小白是只猫";
{
    console.log(a);//这行代码会报错,代码无法执行下去,如果删掉这行代码,则输出"小白是只猫"。
    let a = "豆子也是只猫";
}
console.log(a);

 

posted @ 2020-04-20 09:16  刘伟0413  阅读(77)  评论(0)    收藏  举报