对 let 与循环的反应方式感到困惑

问题描述 投票:0回答:1
const OBJ = {
  MINNI : 79,
  TONU : 34,
  RITU : 23,
}

for(let a in OBJ)
  console.log(a,OBJ[a])

for(e of "abhi")
  console.log(e)

现在 let 实际上从括号外执行阻塞的 scooped 变量.. 难道我们都没有被告知 let 不会对括号下的变量做出反应吗?如果没有循环,它会抛出变量未定义的错误。如果你有这个答案,请告诉我,因为我对这个很困惑

我期望 let 不会对被阻塞挖取的变量做出反应,是的,它通常不会,但是循环它正在执行块下的代码

javascript loops variables
1个回答
1
投票

当您在

let
(或
for-in
,或
for
)循环中使用
for-of
时,变量的作用域是构成循环体的语句的作用域。在你的例子中,循环体是
console.log(a,OBJ[a])
,所以
a
在范围内并且使用它没有问题。

你似乎认为范围需要一个块作为循环体,但它不需要。这个循环:

for(let a in OBJ)
  console.log(a,OBJ[a])

和这个循环一样:

for(let a in OBJ) {
  console.log(a,OBJ[a])
}

a
的范围而言(以及几乎所有其他方面)。

© www.soinside.com 2019 - 2024. All rights reserved.