【发布时间】:2017-07-07 19:12:31
【问题描述】:
for 循环块中的所有块范围变量是否都被提升到循环头本身之上?
var x = 4;
for(let i = 3; i < x; i++) {
let x = 2;
...
}
每次将 i 与循环头中的 x 进行比较时,是否会在 x 上产生死区错误?我知道 i 在块范围内被下推,但为什么不是 x?
【问题讨论】:
-
你想达到什么目的?
-
我正在将块范围的变量添加到我的 javascript 数据库解释器中,我需要知道如何正确处理这种情况。但是,我认为正确的方法是将循环块视为嵌套在循环头中。这样,标头中的
let i在循环块中可见,但循环块中的let x在循环标头中不可见。 -
不确定是什么问题?如果
var x = 4是在for循环之外定义的,为什么还要在for循环中定义let x = 2? -
我的问题是
i是循环块范围的一部分,但我应该在哪个范围内搜索x?如果i和x都在同一个范围内,我应该得到一个死区错误——例如如果块范围提升继续通过循环标头来获取标头的let i声明,并且它也将具有循环的let x声明。因此,标题中x的死区。 -
问题
let i = 3和let x = 2中的示例只能在for循环中访问。这就是使用let的目的,是吗?
标签: javascript ecmascript-6 hoisting