ES6总结 第一节 const、let和var的异同

102 阅读1分钟

var 特性

  1. 存在变量提升
	console.log(a)   // undefined
	var a = 2
  1. 非块级作用域
const a = []

for(var i = 0; i < 10; i++) {
	a[i] = function(){
		return i
	}
}
console.log(a[5]())    // 添加()调用函数,输出 10

  1. 可重复申明,不会报错
	var a = 2
    var a = 3   // 不会报错
  1. 会造成全局变量的污染, let 和 const不会出现类似情况
	console.log(window.RegExp)   // function(){ .... }
	var RegExp = 3
    console.log(RegExp)          //3
    console.log(window.RegExp)   //3

let 特性

  1. 不存在变量提升
console.log(a)   //报错
let a = 3   
  1. 块级作用域
let a = 3

if(true) {
	let a = 2
    console.log(a)
}
console.log(a)     // 依次输出 2  3    
							

  1. 不可重复声明
let a = 2
let a = 3          //报错

const 特性

const 特性和上述的let相同 唯一不同的地方在于 const声明变量后,值不能再修改, 而let可以修改

const a = 2
a = 3  //报错

let a = 2
a = 3   // ok
const a = {
	name: 'Jack'
}
a.name = 'tt'
console.log(a)      //  对象属性变化了,还是可执行


const a = { name: 'Jack' }
a = { name: 'nobody' }  
console.log(a)      //  对象变化了,不可执行,报错