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);

浙公网安备 33010602011771号