【发布时间】:2023-04-07 19:36:01
【问题描述】:
鉴于以下简化代码,为什么会出现 ReferenceError?
function foo(n){
for (let i = 0; i < n; i++) {
console.log(i);
let i = 10;
}
}
foo(4);
// OUTPUT: ReferenceError: i is not defined
let 变量应该被提升为所有其他类型的声明。因此,在此代码中,i 被声明了两次。首先,在初始化关闭中,其次在 for 循环本身中。
为什么输出的是i is not defined而不是Identifier 'i' has already been declared。
JS如何读取上面的代码?
【问题讨论】:
-
这是一个很好的问题。如果我们删除了
let i = 10,它将起作用。据我了解,let不要为循环中的每个scope使用hoist,所以我希望改为打印0,1,2,3
标签: javascript for-loop hoisting