JavaScript: var, let, const 差異

Po-Ching Liu
3 min readOct 18, 2017

在成為更好軟體開發者的道路上,保持程式碼的無暇(clean code)可能是軟體工程師最需要專注的事情之一,而宣告變數的使用方式、型態尤為重要。

JavaScript在ES6中新增了“let”宣告方式來取代”var”。在ES6之前,JavaScript的世界中並沒有區塊域(block)的概念,因此經常使用”var”宣告所有的變數,然而這樣的宣告方式程式碼在運行時可能會出有區域變數覆蓋全域變數或者for loop中循環變數洩漏為全域變數的副作用發生。而在ES6發布之後,有了區塊域(block)的概念以及“let”的推出,上述的副作用就可以完全地避免。

備註:區域變數覆蓋全域變數、循環變數洩漏為全域變數

如果變數(variable)的宣告在往後程式碼的使用中並不會重新賦值,“ const ”則會是我們預設使用的宣告方法,因為我們必須保持程式碼在運行時不會有區域變數覆蓋全域變數或者for loop中循環變數洩漏為全域變數的可能發生,上述兩者則是”var”宣告變數可能產生的副作用。

“ const ”— 一般使用在識別值(identifier)不會被重新指定值。例如:宣告恆定不做改變的變數 — const PI = 3.14159。這也意味著,const在宣告變數時就會進行初始化,無法等到之後再賦予值,因此必定要在一開始就給予值作宣告,否則將會報錯。

“let”— 一般使用在變數(variable)可能會被重新指定值。例如:在迴圈(for loop)中,一開始的變數宣告使用。也可以說較常使用在函式(function)自行定義的區塊(block)中,例如:迴圈(for loop)或者邏輯、數學等演算法括弧({} or ())中作宣告使用,而不會存在並使用於整個函式(function)中。

“var”— 在ES6推出“let”宣告方法後,JavaScript最弱的變數宣告,使用在變數可能或不會被重新賦予值,或者宣告範圍在整個函式(function)或者區塊(block)中。

因此,建議在開發ES6之後的專案中,使用“ const ”或者“let”嚴謹的宣告變數而非“var”,除了讓開發的專案更加穩定外,也可以增加程式碼的可讀性。例如:“ const ”可以提醒閱讀程式碼的人,此變數不應該去做改變。

--

--