繁体   English   中英

在TypeScript(或Javascript)中使用const vs let的好处

[英]Benefit of const vs let in TypeScript (or Javascript)

我正在阅读TypeScript Deep Dive ,我发现letconst都是块作用域,这很棒。 显然,const不能改变(它是不可变的)。 但是为什么ReSharper鼓励我改变尽可能多的let我变成const呢? 我假设ReSharper认为使用const over let会有性能提升吗? 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 ,这有效,但为什么在这种情况下更好呢? 或者无论如何?

我也在SO上发现了这个问题 ,但它更多地讨论了letconst作用,而不是为什么一个比另一个好。 它确实说尽可能使用const ,但它提供了什么好处?

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

是的,它确实向读者发出了你不会分配给变量的信号。 const的好处,而不是发表评论说同样的事情,主要是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 found = child 是的, 可以在测试中找到错误。 但为什么要等待测试? 我从没想过要改变tree 如果我将它标记为const那么我会立即学习错误,因为编译器会告诉我它。 我不必等待测试。 上面的代码相当简单,但想象一下使用更多变量的更复杂的算法。

如果您有一个可以声明为const的变量,并且您将其声明为此类,则通知读者您不打算稍后将其重新分配给其他值。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM