ES6 let、const浅谈

1、ES6的块级作用域是什么样的?

很多编程语言都有块级作用域的概念,如今ES6也终于有了。

if( condition ){

    type variable = value;

}

在if条件外以任何形式访问variable都会报错,只在当前的if块级作用域内才有效,这就是块级作用域。

ES6之前,

for(var i = 0; i < len; i ++){
    //
}
console.log(i);   //有效

如今引入let、const后

for(let i = 0; i < len; i ++){
    //
}
console.log(i);   //error

和我们熟知的C/C++ ,Java等不一样的是。只有关键字let、const声明的变量才是块级作用域变量(注意,const也是块级作用域声明关键字,并且它声明的是常量)。

2、 ES6的let和const和var的区别

除了用let和const声明的变量是块级作用域变量(常量)以外,它们还有一个特点,就是有TDZ(临时死区):

①let和const的不可提升特性

我们先来看用var声明的变量

console.log(variable);  //undefined

var variable = value;
尽管在声明它之前就访问,但是并没有报错,这是因为用var声明的变量等价于:
var variable;

console.log(variable);

variable = vaule;
再来看let(const类似)

console.log(variable);  //出错

let variable = value;

也就是说,只有在用let声明之后,才可以访问,  而且就算使用比较安全的typeof来访问此变量,依然会出错

并且和var还有一点不一样的是,在for循环中,每次循环let/cont都会重新声明

for(var i; //)    //仅仅声明一次
for(let i; //)    //每次循环都会再次声明

而且,for(let i),i的作用域是在for的小括号当中的,{}中的i是通过闭包访问的,理解这一点很重要。

②不可覆盖

用var声明的变量可以多次声明,依次被覆盖。该let和const如果重复声明则会报错。

③全局变量

用var声明的去全局变量,会自动挂载到window对象上(浏览器端),但是let和const的全局声明则不会挂载到window对象上。

所以let/const 不会覆盖window的属性,只会遮蔽它。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值