Tar*_*yen 17 javascript resharper typescript
我读了打字稿深入了解,我看到这两个let和const是块作用域,这是伟大的.显然,const不能改变(它是不可变的).但为什么ReSharper鼓励我改变尽可能多的lets 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;
}
Run Code Online (Sandbox Code Playgroud)
以前,我有let id,let value但ReSharper要求我改变它们const,这有效,但为什么在这种情况下更好?或者无论如何?
我也在SO上发现了这个问题,但它更多地讨论了什么let和const做什么,而不是为什么一个比另一个好.它确实说const尽可能多地使用,但它提供了什么好处?
Lou*_*uis 24
我同意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;
}
Run Code Online (Sandbox Code Playgroud)
在这段代码中,我输入tree = child时打算输入found = child.是的,可以在测试中找到错误.但为什么要等待测试?我从来没有打算tree改变.如果我标记了它,const那么我会立即学习错误,因为编译器会告诉我它.我不必等待测试.上面的代码相当简单,但想象一下使用更多变量的更复杂的算法.
IMO我认为这与性能原因无关,但它可能与文档有关.
如果您有一个可以声明为的变量const,并且您声明它,则告知读者您不打算稍后将其重新分配给其他值.
它也可能与最小特权原则有关,当你声明一个变量时const,你可以保护自己免受以后的事故修改.
| 归档时间: |
|
| 查看次数: |
4962 次 |
| 最近记录: |