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

    上一篇: ES6 declaring variables before or in loop

    下一篇: Keep elements displayed in fullscreen UWP application