【问题标题】:What are the advantages of reassigning constants inside of JavaScript for loops? [duplicate]在 JavaScript for 循环中重新分配常量有什么好处? [复制]
【发布时间】:2021-10-13 16:10:57
【问题描述】:

类似于This Question,在js 中使用const 代替letvar 用于每次迭代更改的值有什​​么优势?

我不是这种模式的特别粉丝,但我有兴趣了解这种模式的优点。

背景

当我在 Visual Studio 中编写 JavaScript 并键入 for 时,它会建议以下代码块:

for (let index = 0; index < array.length; index++) {
    const element = array[index];
                    
}

我个人不喜欢这种模式,因为每次迭代都为const 重新分配一个值,因为它似乎违反了常量的核心思想(是的,我知道常量在技术上超出了范围,但它仍然感觉就像 const 被分配了一个新值)。

我认为这种模式必须有很多很好的理由,否则为什么它会作为建议的代码块保留下来。我想出了一个很好的理由,但我仍然很好奇我缺少什么优势。

我想出的原因

我可以看到这在大型代码块中很有用,您要么需要确保没有人使用此名称,要么多次引用此名称以期望相同的值。

【问题讨论】:

  • 一些消息来源表明使用const 可能比let 具有性能优势,尽管我还没有看到证明这一点的基准。
  • 感觉就像 const 被分配了一个新值” - 在函数中使用 const 时,您是否也有这种感觉?因为,你知道,这个函数可以被多次调用……

标签: javascript for-loop constants


【解决方案1】:

如果你不满意

for (let index = 0; index < array.length; index++) {
    const element = array[index];
}

那么您可能对const大多数 用法不满意,就像大多数函数中的用法一样,因为值经常变化。

function getFullName(first, last) {
  const fullName = first + ' ' + last;
  return fullName;
}

const 的目的是表明那个特定的变量绑定,在它所在的范围内,永远不会被重新分配。 就是这样。在您的循环中,每次迭代都会创建一个新的变量环境,并在每个这样的环境中创建一个const。在这里使用let 不会让事情更清楚——相反,仅仅因为你在一个循环内(或在一个函数内,就像我上面的例子一样)使用let 通常表明对范围的误解。

const 并不意味着,也不应该被认为是暗示:

每当任何地方引用名为&lt;x&gt; 的变量时,该值将是&lt;y&gt;

我建议在适当的时候使用const——也就是说,只要一个特定的变量绑定在它所在的范围内,永远不会被重新分配。这就是它有效所需要的一切,这就是绝大多数专业开发人员使用它的方式,这就是它的意思。当然,您没有必须 - 您可以改用let - 但是使用const 会使代码更容易一目了然,因为您知道标识符不会在它所在的范围内重新分配。

避免var尤其是在循环中,特别是如果有可能执行任何异步代码 - 它具有不直观的函数范围,而不是块范围。 for (let i = 每次迭代都有一个新的绑定; for (var i 曾经只有一个绑定 - 请参阅 this famous question。 (var 在顶层时也会不直观地在全局对象上创建属性,并且当您尝试在给定范围内多次声明变量时不会警告您,这通常表明存在错误。constlet 没有这些问题。)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-04-06
    • 1970-01-01
    • 1970-01-01
    • 2017-05-02
    • 1970-01-01
    • 2017-04-18
    • 2019-11-10
    相关资源
    最近更新 更多