const与let-in-TypeScript(或Javascript)的优势

const与let-in-TypeScript(或Javascript)的优势,javascript,typescript,resharper,Javascript,Typescript,Resharper,我正在阅读,我看到let和const都是块范围的,这很好。显然,常量是不能更改的(它是不可变的)。但为什么ReSharper鼓励我将尽可能多的lets更改为const?我假设ReSharper认为使用const而不是let会提高性能?const和let之间是否存在速度差异?是否有不同的理由使用const?以以下为例: for (let i = 0; i < this.InputControl.ParentQuestions.length; i++) { const id = thi

我正在阅读,我看到
let
const
都是块范围的,这很好。显然,常量是不能更改的(它是不可变的)。但为什么ReSharper鼓励我将尽可能多的
let
s更改为
const
?我假设ReSharper认为使用
const
而不是
let
会提高性能?
const
let
之间是否存在速度差异?是否有不同的理由使用
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;
}
for(设i=0;i
以前,我有
let id
let value
,但ReSharper要求我将它们更改为
const
,这很有效,但为什么在这种情况下效果更好?或者无论如何


我也发现了,但它更多地讨论了
常量
做什么,而不是一个比另一个更好的原因。它确实说要尽可能多地使用
const
,但这有什么好处呢?

当您有一个变量可以声明为
const
,并且您这样声明它时,您会通知读者您以后不打算将其重新赋值

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

我同意性能不是主要原因。代码分析器也可以确定使用
let
声明的变量永远不会被重新分配,并像使用
const
声明一样对其进行优化。(见鬼,Linter有规则来检测这一点,并建议使用
const
而不是
let

是的,它确实向读卡器发出信号,表示您不打算分配给变量。
const
的好处在于,它是一种标准的信号传递方式,而不是用注释来表达相同的内容。作为标准,它比自定义注释更容易传输信息。(另外,一个评论可能是错误的,但是
const
不会让你错的。)我不认为这是主要的好处

“最小特权原则”通常与
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
。是的,这个bug可以在测试中找到。但为什么要等待测试呢?我从来没有想要改变
。如果我将它标记为const,那么我会立即知道错误,因为编译器会通知我。我不必等待测试。上面的代码相当简单,但可以想象一个使用更多变量的更复杂的算法。

因为在这方面TS和JS没有区别,所以我也将添加JS标记。