![](/img/trans.png)
[英]"Why" JavaScript hoists "let" and "const" variable and keep them in temporal zone? so what is the benefit for this behavior?
[英]Benefit of const vs let in TypeScript (or Javascript)
我正在閱讀TypeScript Deep Dive ,我發現let
和const
都是塊作用域,這很棒。 顯然,const不能改變(它是不可變的)。 但是為什么ReSharper鼓勵我改變盡可能多的let
我變成const
呢? 我假設ReSharper認為使用const
over 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;
}
以前,我已經let id
和let value
但是ReSharper讓我把它們改成const
,這有效,但為什么在這種情況下更好呢? 或者無論如何?
我也在SO上發現了這個問題 ,但它更多地討論了let
和const
作用,而不是為什么一個比另一個好。 它確實說盡可能使用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.