首頁>Club>
已經知道let相比於var有許多優點。但是是否存在一些場景下用var更加合適?
5
回覆列表
  • 1 # 網路圈

    老一批程式設計師應該都知道JS定義變數用var關鍵字,還有較多程式設計師不知道ES6新推出的let關鍵字。在JS中看上去用var和let關鍵字都能定義變數,相信有不少朋友會納悶,var和let誰更好呢?這裡我要說的是,以後寫JS程式碼,請忘記var關鍵字,全部改用let來定義變數!

    JavaScript中定義變數的兩種方式

    傳統的JS是使用var關鍵字來定義變數,但在ES6時推出了let關鍵字用來定義區域性變數。兩者在語法上並沒有太大區別,都是用來定義變數的。

    為什麼建議用let替代var定義變數?

    要知道,JS的作用域只有兩種:全域性作用域、函式作用域,沒有塊級作用域。

    這意味著在JS中如果用傳統的var關鍵字是無法定義區域性變數的!可能大家不太明白,這裡舉個例子:

    在上面的程式碼中,我們在for迴圈中定義了一個i變數(我們正常理解時,希望i變數是個區域性變數),但迴圈執行完後,依舊是可以訪問到i變數的(因為JS的每個迴圈體都是一個獨立的塊級作用域),這樣帶來的壞處就是:變數汙染!

    如果我們把var換成let來定義,則迴圈執行完後是無法訪問到i變數的,此時的i變數才是真正意義上的區域性變數。

    除了上面說到的優點外,let定義的變數還有這些優點:

    不會進行預設的變數提升;

    let宣告的變數是不能重複宣告的;

    總結

    由於傳統JS的作用域只有全域性作用域和函式作用域,這種情況下濫用var有時會出現變數汙染的情況;而ES6推出的let關鍵字定義的變數是有塊級作用域的,從程式碼規範性上說,這樣更加規範和安全,建議大家忘掉var關鍵字。

  • 2 # EndyC

    很多專案裡的let已經換回了var,上線反響不佳。相容性對某些瀏覽器來說還不好,且必須在strict模式下使用。個人認為的適用點在for迴圈變數這類作用域很小,使用頻率較高的變數定義上。但不適用於迴圈檢索(需要返回迴圈變數值供迴圈外部使用)。

  • 中秋節和大豐收的關聯?
  • Epic遊戲平臺與育碧的uplay有關係嗎?