var
古老的var现在几乎不用了,出于笔记的完整性,还是记录一下,主要包含一下几个特征:
- 函数级作用域
- 作用域提升
- 重复声明不报错
- 全局声明的变量会成为window的属性
// 作用域提升
function bar() {
a = '1';
console.log(a);
var a;
}
console.log(a) // 此处获取不到a的值,因为`bar`函数可以看成如下的函数变体:
function bar() {
var a;
a = '1';
console.log(a);
}
let
- 块级作用域
- 没有提升
- 不能重复声明
- 混用
var和let声明会报错 - 全局声明不会成为window属性
const
- 声明的同时必须初始化
- 初始化后不能修改
- 不能修改仅限于常量的引用,对象是可以修改属性值的
- 不能用于声明会自增的迭代变量 最后一条如下:
// 不能用const声明,可以用let
for(const index = 0; index <10; index++) {
...
}