ES6在循环之前或循环中声明变量

Mak*_*kla 7 javascript ecmascript-6

我应该在哪里以及如何声明循环中使用的新变量?

A:

const map = new Map(Object.entries(columns));
let cols;
for (let [key, value] of map)
{
    cols = value.split('|');
    //...
}
Run Code Online (Sandbox Code Playgroud)

B:

const map = new Map(Object.entries(columns));
for (let [key, value] of map)
{
    let cols = value.split('|');
    //...
}
Run Code Online (Sandbox Code Playgroud)

C:

const map = new Map(Object.entries(columns));
var cols;
for (let [key, value] of map)
{
    cols = value.split('|');
    //...
}
Run Code Online (Sandbox Code Playgroud)

可能是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).

Tus*_*har 4

在代码片段A中,也cols可以在外部访问for。由于let变量是块作用域的,因此当用于let在 inside 定义变量时for,变量的作用域仅适用于该块。因此,在 B 中,该变量cols将无法在for.

cols如果仅定义一次,则 C 与 A 类似。如果col在同一范围内定义两次,使用let将导致错误。

使用哪一种取决于用例。

  1. 如果仅cols在内部需要for,则使用let cols = ...
  2. 如果在toocols之外需要for,请let cols;在before使用,然后在同一封闭范围内for可以在too之后使用。for请注意,在这种情况下,cols它将是循环中分配的最后一个值。