let var const 区别
var声明是全局作用域或函数作用域,而let和const是块级作用域。var变量可以在其范围内更新和重新声明,let变量可以被更新但不能重新声明,const既不能更新也不能重新声明
var声明的变量会挂载到window上,let和const声明的变量不会
var a=10;
console.log(a,window.a);//10 10
let b=10;
console.log(b,window.b);//10 undefined
const c=10;
console.log(c,window.c);//10 undefined
var声明变量存在变量提升,let和const不存在变量提升
console.log(a); //undefined 声明未赋值 默认undefined
var a=100;
console.log(b);//报错 Cannot access 'b' before initialization
let b=10;
console.log(c);//报错 Cannot access 'c' before initialization
const c=10
let和const声明形成块级作用域
if (true) {
var a=100;
let b=200;
}
console.log(a);//100
console.log(b);//报错 b is not defined
if (true) {
var c=1;
const d=2;
}
console.log(c);//1
console.log(d);//报错 d is not defined
同一作用域下let和const不能够声明同名变量,var可以
var a=10;
var a=100;
console.log(a);//100 后面的会覆盖前面的
let a=10;
let a=100;
console.log(a);//报错 Identifier 'a' has already been declared====a已经声明过了
const a=10;
const a=100;
console.log(a);//报错 Identifier 'a' has already been declared ===a声明过了
修改声明的变量
let和var可以
const声明一个只读的常量,一旦声明,不可改变
var a=10;
a=20;
console.log(a);//20
let a=10;
a=20;
console.log(a);//20
const a=10;
a=20;
console.log(a);//报错 Assignment to constant variable
在函数中使用var声明变量的时候,该变量是局部的
var a=10;
function change(){
var a=20;
}
change()
console.log(a);//10
而如果在函数内不使用var,该变量是全局的
var a=10;
function change(){
a=20;
}
change()
console.log(a);//20
区别
- let可以先声明再复制,而const在声明之后必须马上赋值,否则会报错。
- const简单的类型一旦声明不能再修改,复杂的类型(数组、对象等)指针指向的地址不能修改,内部的数据可以修改。
- var声明的范围是函数作用域,let和const声明的范围是块级作用域。
- .var声明的变量会被提升到函数作用域的顶部,let和const声明的变量不存在提升,并且具有暂时性死区。
- var允许在同一作用域中重复声明同一个变量,let和const不允许。
- 在全局作用域中使用var声明的变量会成为window对象的属性,let和const声明的变量则不会。
- const的行为与let基本相同,但是,使用const声明的变量必须进行初始化,并且不能被修改。 完结