js中var/let/const的區別及使用場景
第一,var是咱們接觸js開始就學習到的一種定義變數的方式,那麼這種方式定義的變數有什麼特點呢?
1,var定義的變數會預解析,簡單的說就是如果變數沒有定義就直接使用的話,JavaScript回去解析這個變數,程式碼不會報錯,只會輸出undefined
2,var定義的變數可以反覆去定義,當然後面的會覆蓋前面的
3,var在迴圈中使用的時候,迴圈體外依然可以使用
4,在迴圈繫結事件過程中,var定義的變數無法儲存,迴圈會在瞬間執行完
第二,let宣告的變數的特點
1,let定義的變數不會預解析,必須先宣告再使用,否則會報錯
2,let不能定義已經定義過的變數(無論之前是用var定義的還是let或者const定義的)
3,let是塊級作用域,函式內部使用let定義後,對函式外部無影響,簡單說就是在一個{}裡面生效
4,由於let是塊級作用域,在迴圈繫結事件過程中let會在這個迴圈中生效,再次迴圈時let會重新定義生效
第三,const宣告的變數的特點:
1,const定義的變數不會預解析,必須先宣告再使用,否則會報錯
2,const定義的變數不允許修改
但是,在數組裡面,const的值是允許被修改的,這是因為const儲存的是地址,值的內容可以變化
下面做個總結,也就是大家需要思考的問題:ES6 提出了兩個新的宣告變數的命令:let
和const,
宣告變數的方式這麼多,我們究竟怎麼選擇更好呢?給大家建議使用的優先順序:const > let > var
首先const宣告常量的好處,一是閱讀程式碼的人立刻會意識到不應該修改這個值,二是防止了無意間修改變數值所導致的錯誤,另外其實js編譯器也對const進行了優化,可以提高程式碼的執行效率;
另外let宣告的變數沒有預編譯和變數升級的問題,先宣告再使用其實更為規範,而let本身是一個塊級作用域,很多時候我們在寫程式碼的時候都希望變數在某個程式碼塊內生效,也更為方便。
最後說一點就是使用的場景說明:let一般應用於基本資料型別;const一般應用於引用資料型別,也就是函式物件等。