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

标签 javascript ecmascript-6

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

答:

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

乙:

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 将仅在 for 内部使用。我想知道如果在循环内初始化变量(例如 100 次)是否存在一些问题。所以我想知道是否应该在循环外初始化。 (A 或 B 示例)

目的不是在循环外获取访问权限,而是防止(例如)100 个初始化变量 cols 在循环内(因为 let 在循环内使用 - 情况 B)。

最佳答案

在代码片段 A 中,cols 也可以在 for 之外访问。由于 let 变量是 block 作用域的,当使用 letfor 中定义变量时,变量的作用域仅限于该 block 。因此,在 B 中,变量 cols 将无法在 for 之外访问。

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

使用哪一个取决于用例。

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

关于javascript - ES6 在循环之前或循环中声明变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38634097/

相关文章:

javascript - ES6 Promise 和 Class 冲突

javascript - 标识符已声明 - 标识符 'userScore' 已被声明

javascript - Chrome CSS 高度属性与 Firefox 不同?

javascript - 如何在 Firefox 的应用程序选项卡上添加通知?

javascript - 使用 const 声明对象变量

javascript - 箭头函数后面加一个()是什么意思?

json - 在 ReactJs 中基于动态路径加载图像

javascript - Zone.js 检测到 ZoneAwarePromise `(window|global).Promise` 已被覆盖

javascript - 在 css 中设置负底部属性扩展页面底部

javascript - 在 ReactJS 中将文本名称渲染为组件