es6中增加了let关键字以定义块级作用域的变量 1.var可以重复声明,后面的会覆盖前面的,let不允许重复声明,会直接报错
var a = 10; var a = 20;//20 console.log(a); let b = 10; let b = 20;//Identifier 'b' has already been declared console.log(b);2.var存在变量提升,let不存在变量提升
console.log(a);//undefined var a = 10; console.log(b); let b = 20;//b is not defined3.let声明的变量支持块级作用域,var声明的变量不支持块级作用域
for (var j = 0; j < 4; j++){ console.log(j); } console.log('j is ' + j);//j is 4 for (let i = 0; i < 4; i++){ console.log(i); } console.log(i);//i is not defined用let声明的关键字只在let关键字所在的代码块内有效,外部拿不到 4.var声明的变量会绑定到window对象上,let不会
var a = 10; var sum = 100; console.log(window.a);//10 console.log(window.sum);//100 let b = 20; const num = 666; console.log(window.b);//undefined console.log(window.num);//undefinedconst用于声明变量,const声明的值不可改变,且在声明的同时必须初始化,不初始化会报错
const a = 100; const b;//声明的时候不初始化会直接报错 b = 200;//报错 console.log(a);//100 // console.log(b);总结 1.var定义的变量会绑定到window上,let和const不会 2.var可以重复声明变量,let和const若重复声明会直接报错 3.const声明的同时必须初始化,不初始化直接报错 4.let没有变量提升 5.let支持块级作用域 6.const声明的变量不可以被修改,但是变量里面的属性可以被修改,若想连属性也不能被修改,需要用Object.freeze(obj);冻结变量