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