ES6下的 let 与 var

ECMAScript 6(以下简称ES6)是JavaScript语言的最新标准,2015年6月正式通过,成为国际通行标准。所以,掌握好ES6的特性,是一个前端应有的品质。

那么首先,我们要从let,var的区别开始讲讲ES6的新特性。
众所周知,用var操作符定义的变量将成为定义该变量的作用域中的局部变量。也就是说,如果在函数中使用var定义一个变量,那么这个变量在函数退出后会被销毁,举个例子:

function do(){
    var a=1;
}
do();
alert(a);

它的结果很明显就是这样:

image

这样看var的作用还是很赞的,但是var本身其实隐藏着一个bug——变量提升(Hoisting)。多说无益,我们从实例中发现问题:

{
    var a=1;
}
console.log(a);

让我们来猜一猜这串代码的结果,如果泥学过C系语言,你可能会认为var定义了一个局部变量,作用域是代码块内,所以其结果应该是报错(undefined)。但实际结果却是这样:

image

这就是神奇的变量提升,在JS中,就是把定义在后面的东西(变量或函数)提升到前面中定义。 其作用类似于:

var a;
{
    a=1;
}
console.log(a);

而在ES6中新增了let命令,用来声明变量。它的用法类似于var,但是所声明的变量,只在let命令所在的代码块内有效。例如:

{
    var a=1;
    let b=2;
}
console.log(a,b);

结果是这样的:

image

因此,我们可以知道let并不会像var一样发生变量提升问题。最后要注意一点,let不允许在相同作用域内,重复声明同一个变量。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值