一.var声明的变量会挂载在window上,而const和let变量不会
var a = 100;
console.log(a,window.a); // 100 100
let b = 1;
console.log(b,window.b); //1 undefined
const c = 10;
console.log(c,window.c); //10 undefined
二.var声明变量存在变量提升,let和const不存在变量提升
console.log(a); // undefined ------ a已声明还没赋值,默认得到undefined值
var a = 100;
console.log(b); // 报错:b is not defined ------ 找不到b这个变量
let b = 10;
console.log(c); // 报错:c is not defined ------ 找不到c这个变量
const c = 10;
三.let和const声明形成块作用域
if(1){
var a = 100;
let b = 10;
const c = 1;
}
console.log(a); // 100
console.log(b) // 报错:b is not defined ------- 找不到b这个变量
console.log(c) // 报错:c is not defined ------- 找不到c这个变量
四、同一作用域下var可以声明同名变量,而let和const不能
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已经被声明。
let 声明的变量,具有如下几个特点:
(1)let 声明的变量具有块作用域的特征。
(2)在同一个块级作用域,不能重复声明变量。
(3)let 声明的变量不存在变量提升,也就是 let 声明存在暂存死区。
const声明的变量,除了有let的几个特点外,还有一个声明后不能再修改,也就是常量。