var定义变量可能存在的问题
- var定义的变量没有块作用域
- var定义的全局变量会自动添加全局window对象的属性
- var定义的变量会提前装载
let关键字正是解决上述问题
<script type="text/javascript" >
for(let i=0;i<10;i++){
console.log(i);
}
//报错Uncaught ReferenceError: i is not defined at
//循环体之外,
console.log(i);
</script>
运行结果:

- 另一个代码:
<script type="text/javascript" >
var name= 'yee';
function test(){
//下面的name变量不存在,因此程序导致错误
console.log(name);
let name = 'nihao';
console.log(name);
}
test();
</script>
错误的提示:

报错解析:
程序先定义了一个全局的name变量,之后在test()函数中使用let定义了同名变量,此时局部变量会覆盖全局变量。但是由于使用let变量不会提前装载,因此test()函数在使用let定义的局部变量name之前会导致错误。
如果test()函数中定义name变量的关键字改为var,则会先输出undefined,在输出局部变量name的值。

博客指出var定义变量存在无块作用域、全局变量自动添加到window对象属性、变量提前装载等问题,而let关键字可解决这些问题。还通过代码示例说明,使用let定义局部变量不提前装载会导致错误,用var则先输出undefined再输出变量值。

被折叠的 条评论
为什么被折叠?



