主要理解 let 和 const 的作用域问题 let 变量不能重复声明。引用类型的const 可以添加属性和值

let const var 变量声明的区别

1. 作用域的区别

test1 使用全局的 var 变量声明的方式

1
2
3
4
5
6
7
function testVar() {
for (var i = 0; i < 10; i++) {
console.log(i); // 1,2,3,4,5,6,7,8,9
}
console.log(i); // 10
}
testVar();

test2 使用块级的作用域 let 变量的声明方式。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
function testLet() {
for (let i = 0; i < 10; i++) {
console.log(i) // 1,2,3,4,5,6,7,8,9
}
console.log(i) // 报错 引用类型错误,变量未声明
}
testLet();
``` js
这里可以看出的是 let 只作用在 { } 中的块级作用域。
-----
### 2. 重复声明变量
test3 重复声明
``` js
var numberVar = 12;
var numberVar = 13;
console.log(numberVar); // 13

这里可以输出的是13 可以看出 number 被重复声明覆盖了 。

1
2
3
let numberLet = 12;
let numberLet = 13;
console.log(numberLet); // 报错 变量重复声明 导致不能解析引入文件


3. const 常量 定义过后的常量就不能修改。

1
2
3
4
5
const PI = 3.1415926;
PI = 123;
const PS;
console.log(PI); // 报错 常量重复赋值。导致不能解析引入文件
console.log(PS); // 报错 常量应该声明时即赋值。

特性: 当为引用类型的时候。

1
2
3
4
5
const k = {
a: 1
}
k.b = 2;
console.log(k) // {a:1,b:2} 值被保存了,增加成功。

对象为引用类型的值,所以能增加成功。