前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >了解下es6中的let、const暂时性死区

了解下es6中的let、const暂时性死区

作者头像
薛定喵君
修改2019-11-22 09:40:49
3820
修改2019-11-22 09:40:49
举报
文章被收录于专栏:薛定喵君薛定喵君

关于TDZ(暂时性死区)的小知识

es6示例代码

es6中,下面的代码执行后会报ReferenceError: a is not defined的错误

代码语言:javascript
复制
let a = 'global'
{
  console.log(a) // ReferenceError: a is not defined
  let a = 1
}

原因:

  • console.log(a) 中的 a 指的是下面的 a,而不是全局的 a
  • 执行 log 时 a 还没「初始化」,所以不能使用(也就是所谓的暂时死区)

why

ES6标准的解释

The variables are created when their containing Lexical Environment is instantiated but may not be accessed inany way until the variable’s LexicalBinding is evaluated.

⬇️

当程序的控制流程在新的作用域(module function 或 block 作用域)进行实例化时,在此作用域中用let/const声明的变量会先在作用域中被创建出来,但因此时还未进行词法绑定,所以是不能被访问的,如果访问就会抛出错误。因此,在这运行流程进入作用域创建变量,到变量可以被访问之间的这一段时间,就称之为暂时死区。

let/const 命令会使区块形成封闭的作用域。若在声明之前使用变量,就会报错。 在代码块内,使用 let 命令声明变量之前,该变量都是不可用的。 语法上称为 “暂时性死区”( temporal dead zone)

advice

所以这就促使我们养成良好的编程习惯,变量一定要先声明后使用。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-11-20 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • es6示例代码
  • why
  • advice
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档