下面介绍的两种方式之间是否有任何差异?我应该使用哪一个原因?
while (true) {
let test = getValue();
....
}
和
let test;
while (true) {
test = getValue();
....
}
答案 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
所以不要试图定义你自己的特殊的块范围变量,而不是主要的变量
我不会给出一个可运行的代码示例,否则你将以无限循环结束