javascript - 怎么理解“循环语句部分是一个父作用域,而循环体内部是一个单独的子作用域”?
本文介绍了javascript - 怎么理解“循环语句部分是一个父作用域,而循环体内部是一个单独的子作用域”?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
问 题
如题。
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';
}
解决方案
第一个,你在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
在你调用的时候并没有定义哈。参见上面一条。
这篇关于javascript - 怎么理解“循环语句部分是一个父作用域,而循环体内部是一个单独的子作用域”?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文