- var声明的变量会挂载在window上,而let和const声明的变量不会 ```javascript var a = 100; console.log(a,window.a); // 100 100
let b = 10; console.log(b,window.b); // 10 undefined
const c = 1; console.log(c,window.c); // 1 undefined
2. var声明变量存在变量提升,而let和const不会```javascriptconsole.log(a); // undefined ===> a已声明还没赋值,默认得到undefined值var a = 100console.log(b); // 报错:b is not defined ===> 找不到b这个变量let b = 10;console.log(c); // 报错:c is not defined ===> 找不到c这个变量const c = 10;
- let 和 const声明形成块作用域 ```javascript if(1){ var a = 100; let b = 10; }
console.log(a); // 100 console.log(b) // 报错:b is not defined ===> 找不到b这个变量
if(1){
var a = 100;const c = 1;
} console.log(a); // 100 console.log(c) // 报错:c is not defined ===> 找不到c这个变量
4. 同一作用域下,let 和 const 不能声明同名变量,而var可以```javascriptvar a = 100;console.log(a); // 100var a = 10;console.log(a); // 10let a = 100;let a = 10;
- const
- 一旦声明必须赋值,不能使用null占位。
- 声明后不能再修改
- 如果声明的是复合类型数据,可以修改其属性
