TypeScript 中 const 与 let 的好处(或 Javascript)

Benefit of const vs let in TypeScript (or Javascript)

我正在阅读 TypeScript Deep Dive,我看到 letconst 都是块范围的,这很棒。显然,const 不能更改(它是不可变的)。但为什么 ReSharper 鼓励我尽可能多地将 let 更改为 const?我假设 ReSharper 认为使用 constlet 有性能提升? constlet 之间有速度差异吗?使用 const 有不同的原因吗?举个例子:

for (let i = 0; i < this.InputControl.ParentQuestions.length; i++) {
    const id = this.InputControl.ParentQuestions[i].ParentId;
    const value = this.InputControl.ParentQuestions[i].ParentRequiredAnswer;
    if (!formVals[id]) return false;
    if (formVals[id].toLowerCase() != value.toLowerCase()) return false;
}

以前,我有 let idlet value,但 ReSharper 要求我将它们更改为 const,这很有效,但为什么在这种情况下更好?或者无论如何?

我也找到了 ,但它更多地讨论了 letconst 的作用,而不是为什么一个比另一个更好。它确实说要尽可能多地使用 const,但这有什么好处?

当您有一个可以声明为 const 的变量时,您将其声明为您通知 reader 您以后不打算将其重新分配给不同的值.

另外,通过声明一个变量 const,这意味着您预先考虑过您不打算重新分配它,这反过来可以保护您免受意外错误或错误的影响。

我同意,性能不是主要原因。代码分析器也可以确定用 let 声明的变量从未被重新分配并优化它,就像用 const 声明它一样。 (哎呀,linters 有规则来检测这个并建议使用 const 而不是 let。)

是的,它确实向 reader 发出您不打算分配给变量的信号。 const 相对于发表评论说同样的事情的好处主要在于 const 是一种标准的发信号方式。作为标准,它比自定义评论更容易传递信息。 (此外,评论可能是错误的,但 const 不会让你犯错。)但我认为这不是主要的好处。

"principle of least privilege"经常和const一起调用,但我为什么要关心最小权限呢?因为 它有助于及早发现编码错误。考虑以下代码:

function findSomethingInDocument(document) {
    let tree = getTreeFromDocument(document); // We get some sort of tree structure.
    let found;
    for (const child of tree.children) {
        if (child.someFlag) {
            tree = child; // Oops I meant found = child :(
            break;
        }
    }
    return found;
}

在这段代码中,当我想输入 found = child 时,我输入了 tree = child。是的,在测试中可以 找到错误。但是为什么要等待测试呢?我从没想过要更改 tree。如果我将其标记为 const,那么我会 立即得知错误 ,因为编译器会通知我。我不必等待测试。上面的代码相当简单,但想象一个使用更多变量的更复杂的算法。