let和var的区别

ES2015已经用let代替var,并完善了var的一些特性,之所以换了一个关键词还保留原有的var关键词是因为原有的很多项目在使用var,所以不能取消,而是用一个新的关键词替代。
一、块级作用域(let声明的变量只能在代码块中被访问到)
以前块没有独立的作用域,外部成员也能访问块内部的变量。


if内就是一个块,在内部声明一个变量,外部能访问。

if(true){
 var foo = 'zcy
}
console.log(foo)
zcy

let声明的变量只能在代码块中被访问到。把var改为let。

if(true){
 let foo = 'zcy
}
console.log(foo)
ReferenceError: foo is not defined

所以,在块级作用域内,外部是无法访问的。

二、let和var的另一个很大的区别在于:let的声明不会出现提升的情况。
而var声明的变量都会被提升到最顶部。


用var声明变量,执行这两行代码,打印的结果是undefined,没有报错误,说明foo已经声明,只是还没有赋值

console.log(foo)
var foo = 'zcy'
undefined

用let声明变量,就报错了

console.log(foo)
let foo = 'zcy'
ReferenceError:Cantnot access 'foo' before initialization

你可能感兴趣的:(let和var的区别)