var、let及const区别
变量提升
console.log(a) //undefined
var a = 1
var b;
console.log(b);
b = 1;
上述代码中,输出a了,此时a还未声明,但是我们却可以正常输出这个未被声明的变量,这就是变量提升,提升的仅仅是声明变量的操作
不仅声明变量会提升,声明函数也会被提升,并且函数声明优先于变量声明
console.log(a) //ƒ a(){ }
var a ;
function a(){ }
a = 3
总结:使用var声明的变量会被提升到作用域的顶部
let和const
var a = 1
let b =1
const c = 1
console.log(window.a) //1
console.log(window.b) //undefined
console.log(window.c) //undefined
function test ( ){
console.log(a);
let a
}
test() //报错
区别
- 首先在全局变量上使用let和const声明变量,变量不会被挂载到window上,而var会
- let和const会生成个块级作用域,变量只在作用域中使用。如在函数里使用let和const,则块级作用域就是函数作用域
- let和const有个特点,叫暂时性死区,变量在作用域内如为被声明,则不能使用
- let和const不能重复声明,const在初始化的时候就要赋值,并且中途不允许修改,可以修改对象的属性值,因为const声明变量只是保证这个对象的指针不变