1.var声明的变量只有函数的作用域
2.let声明的变量有块级作用域 {代码块} 会向上寻找距离该变量最近的开始的{
3.作用范围就是该{内
<script>
{
let a = 100;
console.log(a);
}
</script>
控制台输出结果为:
100
4.let声明的变量没有变量提升的概念
<script>
{
console.log(a);
let a = 100;
}
</script>
控制台输出结果为:
Uncaught ReferenceError: Cannot access 'a' before initialization
5.let声明的变量不能重复声明,包括和var一起使用的时候,也是需要避免
<script>
{
let a = 100;
let a = 10;
}
</script>
<script>
{
let a = 100;
var a = 10;
}
</script>
控制台输出结果为:
Uncaught SyntaxError: Identifier 'a' has already been declared
6.let声明的变量是一个块级作用域,会绑定该区域不会受外界的影响
<script>
{
let a = 100;
{
let a = 10;
console.log(a);
}
}
</script>
控制台输出结果为:
10
7.var声明的变量,会有变量提升。把声明提升到整个作用域的最前面
<script>
{
let b = 10;
{
var b = 100;
}
}
</script>
控制台输出结果为:
Uncaught SyntaxError: Identifier 'b' has already been declared
8.let暂时性死区:let是块级作用域,没有变量提升的概念。在声明之前的一块区域不能使用
<script>
{
let a = 100;
{
console.log(a)
let a = 10;
}
}
</script>
控制台输出结果为:
Uncaught ReferenceError: Cannot access 'a' before initialization
9. const 用法let基本一样 只是const声明的变量不能修改
<script>
const a = 100;
a = 10;
</script>
控制台输出结果为:
Uncaught TypeError: Assignment to constant variable.