正在回答 回答被采纳积分+1
同学你好,问题解答如下:
代码是从上往下读的,并且边读边执行,即js代码是从上往下执行的,对于这个例子,代码会先读“let monkey = '我是美猴王';”并执行它,然后再往下读取并执行“{ console.log(monkey); let monkey = '我觉得我还能再抢救一下!';}”,以此类推......,所以A处代码报错后,A下面的代码就不会执行了,即B处不会执行,该种现象和作用域没关系,它和代码的执行顺序有关系,代码的执行过程,可以类比于一条河流(没有支流),河流从上往下流,只要中间有个位置堵了(代码报错),那么河流就不再往下流了(程序终止)。
同学试着理解一下。
祝学习愉快!
同学你好,解答如下:
1、视频里,将let修改为var的时候,外层打印才输出的3。如果是用let声明的话,是会报错的(视频8.38分前后有讲到)
在for循环中,使用var声明i,即如下:
结果为0123的原因是:
(1)在for循环中,i是全局变量,它从0开始,每循环一次会加1,终止条件是i<3。
(2)当i=0、1、2时,满足for循环条件,会执行for里面的代码,即执行console.log(i)。执行完i=2时候,还会执行i++,所以i变成了3,此时,3不再满足i<3的条件,因此for循环结束。
(3)代码继续往下执行,即执行循环外层的打印,由于i已经变成了3,所以此处会打印3。
关于它的循环过程,建议复习下相关课程:https://class.imooc.com/lesson/769#mid=19251
2、同学可能看错了,是把let修改为var才可以打印出内容的。let只作用在当前块级作用域内,所以这样写是报错的:
3、这块是暂存性死区的概念,在代码块内,使用let命令声明变量之前,该变量都是不可用的。这在语法上,称为“暂时性死区”。
解释:只要块级作用域内存在let命令,它所声明的变量就“绑定”这个区域,不再受外部的影响。
上面代码中,存在全局变量monkey,但是块级作用域内又声明了一个局部变量monkey,导致后者绑定这个块级作用域,所以在let声明变量前,对monkey赋值会报错。
ES6 明确规定,如果区块中存在let,这个区块对这些命令声明的变量,从一开始就形成了封闭作用域。凡是在声明之前就使用这些变量,就会报错。
如果我的回答帮到了你,欢迎采纳, 祝学习愉快~
- 参与学习 人
- 提交作业 239 份
- 解答问题 10739 个
本阶段带你深入前端开发的肌理,通过ES6基础知识和前端主流高级框架的学习,助你快速构建企业级移动webAPP应用,进入职场的终极battle
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星