1)let 语法,这个和var的声明类似,但是,只存在于其所在的代码块里。
举例:
var x=1 console.log(x) { let x=2 console.log(x) } console.log(x)
输出值是什么?1 2 1,为啥?因为let x只存在于代码块里,和外面的x毫无关系。
var x=1 console.log(x) { x=2 console.log(x) } console.log(x)
输出是1 2 2
因此,let这个东西,就很适合在for语句中使用,避免对其他代码块造成误伤。
同时,let语句,要先声明,再使用,否则,会报错。
再看下面的代码:
var x=1 console.log(x) { x=2 console.log(x) let x } console.log(x)
这个时候,会报错,说,x没有定义过!
let可以用来定义块级的作用域
在ES5的时候,只有全局作用域和函数作用域,这会带来很多不便。比如:
第一种情况,内层变量会覆盖外层变量:
var tmp=new Date() function f(){ console.log(tmp) if(false) { var tmp='hello wcf!' } console.log(tmp) } f()
这个时候,打印出来的是啥?
undefined
undefined
因为,tmp变量在函数里重新定义了,但是,又没有赋值,所以,是undefined。
再看代码:
var tmp=new Date() function f(){ console.log(tmp) if(true) { var tmp='hello wcf!' } console.log(tmp) } f()
undefined
hello wcf!
有了let,就可以类似的定义块级作用域:
var tmp=new Date() function f(){ console.log(tmp) if(true) { let tmp='hello wcf!' console.log(tmp) } console.log(tmp) } f()