var/let/const 變數的申明
在ES2015也就是ES6規範之前,Javascript中對變數的定義只有var
這個關鍵字進行變數申明,或者你可以不用關鍵字(現在情況是,你也可以不申明變數,只要變數名不重複)
而在ES2015規範中新新增了let
和const
兩個關鍵字,同樣也是用來進行變數申明的,其中const
是定義常量,也就是,一旦申明瞭變數,那麼變數的值是不能修改的。
關於var
、let
和const
三者的使用區別,在這裡也不多介紹了,因為網上也有不少關於三者的解釋說明,如果你要詳細研究的話我建議檢視Mozilla的MDN文件,上面有規範的詳細說明與示例。
這裡主要是想推薦下自己使用的一個感覺,因為再對比了國外和國內對ES2015規範使用的程式碼中,我發現,國內更傾向於使用let
來申明變數,而國外更多的是使用const
來申明,在以前我也是簡單的用let
來代替var
使用,但是在看了一些老外的程式碼後覺得如果沒有必要那麼應該使用const
來申明變數,這裡可能有人會奇怪了,const
不是申明常量,怎麼會申明變數呢?其實const
申明的常量分為兩類,值型別和引用型別,對於值型別,比如
const a = 1
複製程式碼
那麼這個變數a
的值是不能改變的,但是對於引用型別,比如
const b = {str:'hello',name:'world'}
b.name = 'world!'
複製程式碼
其中b
是引用型別,你可以改變b
的屬性值,但是不能改變b
的引用地址
那麼接下來就要說說為啥推薦更多的使用const
首先,我們在引用第三方庫的時候,一旦命名好了,其實我們是不希望在之後的程式碼中改變的,比如說
const path = require('path')
path.resolve(...)
複製程式碼
這樣定義的話就能保證在下面程式碼中使用的時候不會使用了別的含義的物件
其次,在遍歷方法中,我們不應該改變原始的遍歷資料,而是應該產生一個改變後的副本資料
for(let item of obj) {
item = ...
}
for(const item of obj) {
item = ...
}
複製程式碼
上面一種遍歷的時候對獲取的物件是使用let
申明的,這樣我們在遍歷資料的時候能夠修改原始資料
而下面一種使用了const
來申明,那麼我們是不能對原始資料做直接的修改,當然了,如果遍歷的元素是引用型別,那麼還是能夠修改引用值的,但是使用const
申明的話,會提醒我們,不要去修改原始資料
最後,就是即使使用cosnt
申明,我們一樣可以對引用型別的值進行修改、新增、刪除的,使用起來跟let
是沒有分別的
所以個人覺得多使用const
的對變數申明會更好些