关于ES6块级作用域的一点理解

阅读阮一峰老师的《ECMSript6 入门》文章的过程中,对于其中一句话以及结合给出的案例,自己理解起来有些晦涩,于是把自己的理解写下来,如有不对,望指正.

// 第一种写法,报错
if (true) let x = 1;

// 第二种写法,不报错
if (true) {
  let x = 1;
}
上面代码中,第一种写法没有大括号,所以不存在块级作用域,而let只能出现在当前作用域的顶层,所以报错。第二种写法有大括号,所以块级作用域成立。

其中“let只能出现在当前作用域的顶层”这句话中的“顶层”该如何理解?

我的理解:

假设这两if都处在全局作用域下,拿第一种写法来说,没有大括号,那x的当前作用域应该就是全局作用域,而if判断的执行体按照es6规范来说不是一个块级作用域,但是其本身就具有一个层级结构,if条件判断一个层,执行体算是下一层,而在执行体内let声明的x变量,此时并不处在全局作用域的顶层,而是全局作用域的第二层,所以会报错。

 

  • 13
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值