var声明变量存在变量提升,let和const没有
变量提升:在一开始的时候把所有的声明先执行
(JavaScript 中,函数及变量的声明都将被提升到函数的最顶部。)
console.log(a) ------------undefined, a已声明还没赋值,默认得到undefined值
var a = 100;
console.log(b)-------------报错 :b is not defined ===> 找不到b这个变量
let b =100;
console.log(c)
const c=100;------------- 报错:c is not defined ===> 找不到c这个变量
let和const存在作用域,var没有
const定义的复杂变量,可以修改属性,const定义的不可以为null且不能修改
// 块作用域
{
var a = 1;
let b = 2;
const c = 3;
// c = 4; // 报错,const不能修改
var aa;
let bb;
// const cc; // 报错,必须初始化(即必须赋值)
console.log(a); // 1
console.log(b); // 2
console.log(c); // 3
}
console.log(a); // 1
// console.log(b); // 报错,只能在块作用域里访问
// console.log(c); // 报错,只能在块作用域里访问
```
### 同一作用域下let和const不能声明同名变量,而var可以
```
var a = 100;
console.log(a); // 100
var a = 10;
console.log(a); // 10
let a = 100;
let a = 10;
// 控制台报错:Identifier 'a' has already been declared ===> 标识符a已经被声明了。
```