ECMAScript 6(以下简称ES6)是JavaScript语言的最新标准,2015年6月正式通过,成为国际通行标准。所以,掌握好ES6的特性,是一个前端应有的品质。
那么首先,我们要从let,var的区别开始讲讲ES6的新特性。
众所周知,用var操作符定义的变量将成为定义该变量的作用域中的局部变量。也就是说,如果在函数中使用var定义一个变量,那么这个变量在函数退出后会被销毁,举个例子:
function do(){
var a=1;
}
do();
alert(a);
它的结果很明显就是这样:
这样看var的作用还是很赞的,但是var本身其实隐藏着一个bug——变量提升(Hoisting)。多说无益,我们从实例中发现问题:
{
var a=1;
}
console.log(a);
让我们来猜一猜这串代码的结果,如果泥学过C系语言,你可能会认为var定义了一个局部变量,作用域是代码块内,所以其结果应该是报错(undefined)。但实际结果却是这样:
这就是神奇的变量提升,在JS中,就是把定义在后面的东西(变量或函数)提升到前面中定义。 其作用类似于:
var a;
{
a=1;
}
console.log(a);
而在ES6中新增了let命令,用来声明变量。它的用法类似于var,但是所声明的变量,只在let命令所在的代码块内有效。例如:
{
var a=1;
let b=2;
}
console.log(a,b);
结果是这样的:
因此,我们可以知道let并不会像var一样发生变量提升问题。最后要注意一点,let不允许在相同作用域内,重复声明同一个变量。