使用let 在同一作用域中 声明了相同的变量名,会导致上述错误
先使用 后声明 出现的错误
let : 写法和var 一致, 用来声明变量
let a = 10;
console.log(a);
let 和 var 的具体区别:
var :
- 重复声明
- 作用域: 全局作用域 函数作用域(局部作用域)
- 可以预解析(变量提升)
let :
- 不可以重复声明
- 作用域: 全局作用域 块级作用域(一对花括号包裹的区域)
- 不可以预解析(变量提升) 严格遵守先声明 后使用
补充: 由于ie低版本不兼容es6新语法,所以在使用的时候优先考虑兼容性的问题
如果不考虑兼容的话, 优先推荐使用let/const
var a = 10;
var a = 15;
console.log(a); //15
let b = 1;
let b = 2;
console.log(b);//报错
if(true){
// var a = 1;
let a = 1;
}
console.log(a);//报错 let的块级作用域是在{}中可以找到
console.log(a);//1 let没有变量提升
var a = 1;
let a = 10;
块级作用域 : 只要是一个对花括号 就是一个块级作用域
块级作用域类似ES5中
局部作用域,声明在其中的变量,出了该作用域,失效
{
let b =10;
}
console.log(b);//报错
<style>
li{
width: 20px;
height: 20px;
border: 1px solid;
}
</style>
<ul>
<li>1</li>
<li>2</li>
<li>3</li>
<li>4</li>
<li>5</li>
</ul>
<script>
var lis = document.querySelectorAll("li");
for(let i = 0; i < lis.length; i++){
lis[i].onclick = function () {
console.log(this.textContent);
}
}
</script>
const : 声明常量
变量: 可以改变的, 常量:不可以改变的
-
使用let声明的变量可以修改, 使用const声明的变量,不可以修改
-
声明的时候,必须赋值
-
其他情况,可以let一致(不重复,块级作用域,不预解析)
const b = 10;
b = 15;
console.log(b); //变量不可以修改
const b = 10;