1. 程式人生 > >js中let、var、const定義變數的區別

js中let、var、const定義變數的區別

首先需要明確的是let、const、var都是用來定義變數的 在ES6之前,我們一般都用var來定義變數,例如 :

在上面的程式碼中,我們可以預計到第一個console輸出的是1,第二個由於變數提升輸出的是undefine,而不是產生ReferenceError錯誤,第三個輸出的還是1;也就是說在函式中定義的一個變數,在函式外部仍然是可以使用的,那麼我們再來看看這一段程式碼:

執行完後,我們會發現第一個console仍然輸出了1,第二個和第三個產生了ReferenceError錯誤!對比之下我們會發現let的作用域比var更加嚴格了,有點類似於Java中的變數定義,1、必須先定義再使用,2、有著嚴格的作用域,變數只作用域當前隸屬的程式碼塊

在新的ES6標準中let完全可以替代var,在ES6中另外一個定義變數的關鍵字是 const,const 代表一個值的 常量索引 ,也就是說,變數名字在記憶體中的指標不能夠改變,但是指向這個變數的值 可能 改變。例如:

我們建立了一個擁有常量索引的陣列變數,然後新增值到這個陣列中,但是並不改變它的索引,雅思寫作教材所以上面的程式碼完全可以執行。 但是當我們想修改索引到一個新的陣列中,就會產生一個錯誤TypeError:

總結:

1.在 ES6 不要使用 var,用 let 或 const 代替。var 在一定程度上存在缺陷,其實在 strong mode 下使用 var 會直接報 最簡單的方式就是全域性替換成 let,但建議注意一下 const。let 和 const 區別並不大,const 為常量,let 為變數。我的使用方式是隻要定義的不會改變就用 const,然後你會發現大部分使用的是 const。

2.var 宣告的變數作用域不是塊級的,會擴大變數的作用域,可能造成不必要的 shadow(變數覆蓋),通常情況下都不是想要的結果。let 宣告的變數作用域就更精確,離開作用域變數就銷燬。const 顧名思義就是常量了。

3.let的作用範圍比var有限,適用於迴圈這樣的環境。