《實戰ES2015》之var、let、const

《實戰ES2015》之var、let、const

《實戰ES2015》之var、let、const

前言

一直想學習ECMAScript(ES),但是一直沒有行動,這次從網上找到這本書(講的是ES5),還是準備看下再去接觸ES6。

let 與 var 的異同點比較

《實戰ES2015》之var、let、const

var可以讓同一個變量名在同一個作用域裡被定義多次,而這種“特性”很可能會導致一些問題。而使用let定義,當同一個變量名在同一個域內被定義第二次時,便會拋出錯誤,以警示開發者修改代碼

下面這段代碼科直觀的說明for循環中使用var和let的區別

《實戰ES2015》之var、let、const

const

const的實現原理確實只限創造一個不可變的內存綁定,而在某些情況下,並非值不可變。

《實戰ES2015》之var、let、const

foo對象字面量定義的內存存儲空間

《實戰ES2015》之var、let、const

const在這段代碼中所起到的作用是:將常量foo與內存偏移值為0的內存空間綁定起來並鎖死。然而內存偏移值分別為1和2的a和b屬性並沒有得到強綁定,導致了以下情況的發生。

《實戰ES2015》之var、let、const

字符串、數字、布爾值等值類型因為只使用了一段內存空間,並不會有如上這種問題。對象、數組等稀疏引用類型值會存在這種問題。

如何解決

我們只要配合ES5中的Object.freeze()方法

《實戰ES2015》之var、let、const

除了let會產生塊級作用域以為,const同樣可以產生塊級作用域,其定義的常量也同樣遵循變量在作用域中的生命週期。也就是說,與我們熟知的全局變量不同的是,使用const定義的常量同樣是可以靈活使用的,比如定義一些只針對繆戈作用域或是某個函數、算法內的常量。

一旦js引擎進入一個作用域時,會先掃描該作用域內的定義語句。且被掃描到的變量名都會進入未聲明階段。以下代碼來理解這點:

《實戰ES2015》之var、let、const

閉包的原理便是利用高階函數來產生能夠穿透作用域的引用

《實戰ES2015》之var、let、const

未完待續……Continued……

希望這篇文章能給你帶來知識和樂趣,喜歡作者的文章可以關注作者哦。


分享到:


相關文章: