我应该在哪里以及如何声明循环中使用的新变量?
A:
const map = new Map(Object.entries(columns));
let cols;
for (let [key, value] of map)
{
cols = value.split('|');
//...
}
B:
const map = new Map(Object.entries(columns));
for (let [key, value] of map)
{
let cols = value.split('|');
//...
}
C:
const map = new Map(Object.entries(columns));
var cols;
for (let [key, value] of map)
{
cols = value.split('|');
//...
}
可能是A或B因为每个人都说let是新的var,但A和B之间有什么区别吗?
编辑:
变量cols将仅用于内部。如果变量在循环内被初始化(例如100次),我想知道是否存在一些问题。所以我想知道它是否应该在循环外初始化。 (A或B示例)
The purpose is not to get access outside loop, but prevent (for example) 100 initialization variable cols inside loop (because let is used inside loop - case B).
答案 0 :(得分:3)
在代码段A中,function x() {
if (this instanceof x) {
/* Probably invoked as constructor */
} else return 30;
}
也可以在cols
之外访问。由于for
变量是块范围的,当使用let
来定义let
内的变量时,变量的范围仅适用于该块。因此,在B中,变量for
将无法在cols
之外访问。
for
仅定义一次,则 C类似于A.如果使用cols
在同一范围内定义col
两次将导致错误。
使用哪一个取决于用例。
let
内需要cols
,然后使用for
let cols = ...
之外也需要cols
,请在for
之前使用let cols;
,然后在for
之后也可以在同一封闭范围内使用for
。请注意,在这种情况下,cols
将是循环中分配的最后一个值。答案 1 :(得分:0)
A和B之间的差异是var的范围。在第一种情况下,你也可以在循环外访问cols
,在第二种情况下你不能访问。
let a;
for (let i =0; i < 2; i++) {
let b = i;
a = i;
}
console.log('a outside the loop:', a);
console.log('b outside the loop:', b);
console.log('i outside the loop:', i); //If `var` was used instead of `let` then `i` would have had global scope