用let重新分配javascript

时间:2017-12-11 10:17:12

标签: javascript ecmascript-6

下面介绍的两种方式之间是否有任何差异?我应该使用哪一个原因?

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

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

7 个答案:

答案 0 :(得分:8)

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

您应该使用此表单(请注意,如果您不在同一块中修改值,则不需要let)如果您只在块内使用test(而不是在)。

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

如果您需要从test循环外部访问while,则应使用此表单。

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

答案 1 :(得分:4)

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

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

否则,第一个更好

答案 2 :(得分:3)

是的,第一个版本存在差异,您无法在while循环之外访问变量测试。在第二个版本中,您可以在循环外部访问测试变量。

答案 3 :(得分:3)

是的,存在差异:

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

我应该使用哪一个原因?

正确的情况。如果你需要为每个循环单独的test变量,或者只是希望它对循环是私有的,那么使用第一个;如果没有,请使用第二个。

答案 4 :(得分:2)

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

答案 5 :(得分:1)

是的,两者之间存在差异。

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

  • 如果您在循环中声明它,它可以仅更新&amp;可以在该循环中访问

答案 6 :(得分:0)

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

所以不要试图定义你自己的特殊的块范围变量,而不是主要的变量

我不会给出一个可运行的代码示例,否则你将以无限循环结束