1)局部作用域
```js // 函数作用域 function foo(){ var a = "a"; let b = "b"; } console.log( a ); // 报错 console.log( b ); // 报错
// 块级作用域 if(true){ var c = "c"; let d = "d"; } console.log( c ); // "c" console.log( d ); // 报错 ```
结论:
var
声明的变量,局部作用域只能通过函数产生。let
声明的变量,局部作用域由大括号产生。
2)变量重复声明
```js var a = 1; var a = 2; console.log( a ); // 2
let b = 1; let b = 2; console.log( b ); // 报错 ```
结论:
在同一个作用域中,
var
可以声明重名的变量,后面的会覆盖前面。let
不允许声明重名的变量,程序会报错。
3)变量提升
js console.log( a ); // undefined console.log( b ); // 报错 var a = 1; let b = 2;
结论:
var
声明的变量会发生变量提升,而let
不会。