ES6在循环之前或循环中声明变量
我在哪里以及如何声明循环中使用的新变量?
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是新变种,但是A和B之间有什么区别吗?
编辑:
变量cols将仅用于for。 我想知道是否有一些问题,如果变量在循环内初始化(例如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).
在代码片段A中, cols
也可以在for
之外访问。 由于let
变量是块范围的,所以在使用let
来定义变量for
,变量的范围仅适用于该块。 因此,在B,该变量cols
不会是的外部访问for
。
C,类似于A,如果cols
只定义一次。 如果col
在相同范围内定义两次,那么let
会导致错误。
使用哪一个取决于用例。
cols
需要里面for
唯一的,然后使用let cols = ...
cols
需要外部for
过,用let cols;
之前for
,然后将它后即可使用for
太在相同的封闭范围。 请注意,在这种情况下, cols
将是循环中分配的最后一个值。 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
链接地址: http://www.djcxy.com/p/35455.html