- 作用域不同:
全局中var声明的变量的作用域是全局,而函数内部用var声明的变量的作用域是该函数内部;
let声明的变量的作用域在块级或子块中(一般情况下是被{}包裹起来的区域)
for(var i=0;i<3;i++){
var num = 10;
let sum = 20;
console.log(sum); //20
}
console.log(num); //10
console.log(sum); //报错
- 变量提升
在全局作用域及函数作用域中用var声明的变量,都会被提升到作用域的顶部;
用let声明的变量,不会提升到作用域的顶部,只能在变量声明后才能使用;
console.log(num); //undefined
var num = 10;
console.log(sum); //报错
let sum = 20;
- 相同的作用域内不能重复声明一个变量
for(var i=0;i<3;i++){
var num = 10; //报错
let num = 20;
console.log(num);
}
for(var i=0;i<3;i++){
let num = 10; //报错
let num = 20;
console.log(num);
}
4.let解决了闭包的问题
<ul>
<li>首页</li>
<li>商城</li>
<li>专卖店</li>
</ul>
var lis = document.querySelectorAll('li');
for(let i=0;i<lis.length;i++){
lis[i].onclick = function (){
console.log(lis[i].innerHTML);
};
}