关于暂存死区

关于暂存死区

老师看看我的注释 问题在注释里

//暂存死区  不是很理解 希望老师在讲一遍

let monkey="hhh";  //这个是不是相当于定义了一个全局变量  

{

console.log(monkey);    //这个就可以访问 前面定义的的那个全局变量  

let monkey2="hhhaaa";  //如果这个monkey2变为了monkey 就出现暂存死区 由于前面一段代码未经定义就先试用     就会报错 

}

console.log(monkey);  //这个是访问外面monkey 


正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

2回答
好帮手慕慕子 2020-08-17 17:37:55

同学你好,具体可以参考如下解析:

  1. 只要块级作用域内存在let(或const)命令,它所声明的变量(或常量)就“绑定”在这个区域,不再受外部的影响。

  2. 代码中存在全局变量monkey,但是块级作用域内let又声明了一个局部变量monkey,导致后者绑定这个块级作用域,所以在let声明变量前,访问monkey会报错。

  3. ES6 明确规定,如果区块中存在let和const命令,这个区块对这些命令声明的变量,从一开始就形成了封闭作用域。凡是在声明之前使用这些变量,就会报错。

  4. 综上可知:在代码块内,使用let(或const)命令声明变量之前,该变量(或常量)都是不可用的。这种现象就称为暂存死区。

 如果我的回答帮助到了你,欢迎采纳,祝学习愉快~

好帮手慕码 2020-08-17 17:28:49

同学你好,理解的是正确的。另:

1、只要在块级作用域中,使用let或const关键字声明变量之前,该变量都是不可用的。这在语法上,称为“暂时性死区”。

2、代码中:在使用let声明monkey之前,如果使用了变量,就会报错:

http://img1.sycdn.imooc.com//climg/5f3a4cde09dd869206810151.jpg

原因:let不存在变量提升,那么在定义以前,不可以使用该变量。同学再理解下。

如果我的回答帮到了你,欢迎采纳,祝学习愉快~

问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星

相似问题

登录后可查看更多问答,登录/注册

请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师