为了账号安全,请及时绑定邮箱和手机立即绑定

怎么理解“循环语句部分是一个父作用域,而循环体内部是一个单独的子作用域”?

怎么理解“循环语句部分是一个父作用域,而循环体内部是一个单独的子作用域”?

小唯快跑啊 2018-11-06 13:13:27
如题。for (var i = 0; i < 3; i++) {  var i = 'abc';  console.log(i);}//为什么这里只输出一次 abc ? 是因为'abc'++ <3 是false吗?for (let i = 0; i < 3; i++) {  let i = 'abc';  console.log(i);}//为什么是3次 abc?for (let i = 0; i < 3; i++) {console.log(i) //这里报ReferenceError: i is not define?是因为暂时性死区?let i = 'abc';}
查看完整描述

1 回答

?
湖上湖

TA贡献2003条经验 获得超2个赞

第一个,你在for里面var i,它们是在同一个作用域的,因为var是一个函数作用域。i = 'abc';i++,这样i就变成NaN了。NaN和数字比较,无论是什么比较,都为false。所以,只输出一次。

第二个,let是块级作用域,所以在for (let i = 0; ...)定义的i只在for的括号里有效,在块内是没有效果的,所以let i = 'abc'是相当于重新定义了一个变量,是for代码块的块级作用域的变量,只在for代码块里有效。所以执行了三次。

第三个问题,你在console.log之后定义了let i,所以i在你调用的时候并没有定义哈。参见上面一条。


查看完整回答
反对 回复 2018-12-14
  • 1 回答
  • 0 关注
  • 657 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信