用 let 重新分配 javascript



下面描述的两种方式之间有什么区别吗?我应该使用哪一个为什么?

while (true) {
let test = getValue();
....
}

let test;
while (true) {
test = getValue();
....
}

let块范围的,这意味着它只存在于{...}块中。

如果您不打算在while循环之外访问变量test,则应使用第一种形式。

while (true) {
let test = getValue();
....
}

如果需要从while循环外部访问test或跨迭代重用它,则应使用第二种形式。

let test;
while (true) {
test = getValue();
....
}

另请注意,如果您不打算将另一个值重新分配给test,最好使用const

如果在 while 循环之外使用测试变量,请使用第二个:

let test;
while (true) {
test = getValue();
....
}
if (test) { ... }   // <--- Use test outside the while loop

否则,第一个更好

是的,第一个版本有所不同,您无法在 while 循环之外访问变量测试。在第二个版本中,您可以在循环之外访问测试变量。

是的,有区别:

  • 在第一种示例中,每个循环迭代都有一个单独的test变量;在第二种情况下,所有循环迭代只有一个共享test变量。如果您在循环中创建任何函数,这将具有重要影响,并且可以具有性能方面(当然,像所有性能方面一样,它只是在出现问题时才是一个问题)。
  • 在第一个示例(每个)中,test变量只能在循环内访问;在第二个示例中,一个test变量也可以在循环外部访问。

我应该使用哪一个为什么?

适合这种情况。如果每个循环都需要一个单独的test变量,或者只是希望它对循环私有,请使用第一个;如果没有,请使用第二个。

在第一个版本中,变量的范围在 while 循环中受到限制,而在另一个变量中,可以在 while 循环之外访问。

是的,它们之间存在差异。

  • 如果在循环外部声明变量,则可以在循环中更新该变量,然后在循环外的其他代码中访问该变量。

  • 如果你在循环中声明它,它只能在该循环中更新和访问

>let有一个块作用域- 这意味着变量将仅存在于其周围的花括号对中。因此,在这种情况下,当我们尝试在循环后打印let的值时,它将返回undefined

while (true) {
let test = getValue();
console.log(test); // => some value...
....
}
console.log(test); // => undefined

在这种情况下,test已在 while 循环(大括号)之前定义,因此它将保留在 while 循环之外:

let test;
while (true) {
test = getValue();
console.log(test); // => some value...
....
}
console.log(test); // => still some value...

请注意,即使您在 while 循环内外使用let,它也会以相同的方式处理它:

let test = 5;
while (true) {
let test = 4;
console.log(test); // => 4
....
}
console.log(test); // => 4, not 5

所以不要试图定义你自己的独立于主变量的特殊块范围变量

我不会给出一个可运行的代码示例,否则你最终会陷入无限循环

let 是块范围的,这意味着它只存在于 {...} 块中。

因此,如果要在循环之外访问 let 值,则必须使用它,

let data;
while (true) {
data = getData()
}

最新更新