var、let 和 const 的区别

var、let 和 const 的区别

var let const
函数级作用域 块级作用域 块级作用域
变量提升 不存在变量提升 不存在变量提升
值可更改 值可更改 (注意作用域) 一旦声明变量必须赋值,声明之后不能再修改,如果声明的是复合类型数据,可以修改其属性
  1. var声明变量会挂载在widow上,而let和const声明的变量不会挂载在widow上
var a = 111;
console.log(window.a);//111
let b = 222;
console.log(window.b);//undefined
const c = 333;
console.log(window.c);//undefined
  1. var声明的变量存在变量提升,let和const不存在变量提升
console.log(a);//undefined
var a = 111;
console.log(b);//error
let b = 222;
console.log(c);//error
const c = 333;
  1. let和const声明形成块作用域
if(1){
     
	var a = 111;
	let b = 222;
	const c = 333;
}
console.log(a);//111
console.log(b);//error
console.log(c);//error

  1. 同一作用域下let和const不能声明同名变量,var可以声明同名变量
var a = 111;
console.log(a);//111
var a = 1111;
console.log(a);//1111

const b = 222;
console.log(b);//error
const b = 2222;
console.log(b);//error

let c = 333;
console.log(c);//error
let c = 3333;
console.log(c);//error

  1. const一旦声明变量必须赋值,声明之后不能再修改,如果声明的是复合类型数据,可以修改其属性。var和let声明的都可以做修改,但是let有作用域哦。
//有一回被问着,const声明后是否可以修改,结果就被教育了,hahah~
const arr = [1,2,3]
arr[2] = 22
console.log(arr);//[1, 2, 22]

const obj = {
     a:1,b:2,c:3}
obj.b = 22
console.log(obj);//{a: 1, b: 22, c: 3}

你可能感兴趣的:(javascript,js,vue)