簡體   English   中英

“為什么”JavaScript 提升“let”和“const”變量並將它們保持在時間區域? 那么這種行為有什么好處呢?

[英]"Why" JavaScript hoists "let" and "const" variable and keep them in temporal zone? so what is the benefit for this behavior?

為什么 javascript 會提升 let 和 const 變量,而我們在初始化之前無法到達它們,這樣就可以結束時間死區。 這種行為有什么特別的好處嗎? 為什么js不會在沒有任何托管的情況下離開那些?

因為當您隱藏變量時,將不清楚標識符將在時間死區中引用哪個變量,尤其是當使用var聲明的變量也被提升時。 因此, letconstvar一致,因為它們也被提升,但在var表現出令人困惑的行為的情況下,它們更具限制性。

 let val = "a";
 {
    console.log(val);
    let val = "b";
 }

編程語言通常有一個傳統,比如變量應該定義在頂部。 在幕后 JS 也是這一傳統的一部分。 它將var提升到頂部並將其設置為undefined直到它被定義。 這種行為可能會導致不必要的后果,因為 JS 會嘗試將其視為普通變量,並嘗試對未定義的變量執行某些操作,但是因為沒有任何內容,您將收到錯誤消息。 所以他們引入了letconst關鍵字來防止這種不良行為,並說這些也是提升機,我們將它們設置為未uninitiliazed ,在它們被分配給某些東西之前你不能使用它們,因為這沒有意義,你為什么要使用在它分配給某物之前的變量?

wall 它使事情變得更加清晰 - 有時您必須多次聲明變量的相同名稱,並且您不想混淆它們的值

- 當您使用var它會在全局范圍內聲明,並且在函數成功運行后,它不會清除內存,在這種情況下,如果您有許多需要太多內存的變量,它將影響您的應用程序性能

在你的情況下:-

     let val = "a"; // this let have globle scope
 {
    console.log(val);
    let val = "b"; // this let have local scope that going to be clear from memory when this brakets endes 
 }

結論:-

var is a global scope
let & const are BLOCK scope that going to be clear after brackets ended

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM