let 、const 、var和解構賦值

? ? ? ?今天說一下,let、const、var還有數組的解構賦值,不得不說上班偷偷干自己的事情還是挺爽的。let、const、var這三個都可以用來聲明變量,但是let和const是es6新出的玩意,而var是之前已經都有的已經存在的東西。關于var我們就不多說了,反正平常也是經常用,就是聲明個變量啥的,重點還是要講一下let和const。至于解構賦值,就是數組按照一定的模式從數組和對象中提取出來值然后對變量賦值,其實就是找規律看眼緣。

? ? ? ?首先我們說下塊級作用域,在es5呢只存在全局作用域和函數作用域,而es6中新加了個塊級作用域,原因呢就是因為原有的內容存在著不便(這句好像是廢話);首先是原來的那些個作用域會因為這什么變量提前(就是你還沒有聲明就已經調用)而導致數據獲取的錯誤,其次就是因為循環導致的全局變量泄漏(這個一些在for循環里做click操作什么的都知道)。所以我們引入塊級作用域,啥叫塊級作用域呢,可以理解為任意兩個大括號{}之間都可以算作塊級作用域或者let和const聲明變量的地方也可以算作塊級作用域。

? ? ?let呢,作用跟var類似,聲明變量,但是let聲明的變量只在let命令所在的代碼塊里面有效(let是老大在這塊),在這個代碼塊之外就不會被認識(類似于出了這個門就六親不認),但是var不同,函數作用域可以調用全局作用域聲明的變量,也可以調用自己函數作用域的變量,并且采取相同變量名的就近原則,你要是這么用let,那就是報錯。而且在let的代碼塊里,let和var不能聲明同一個變量不然還是報錯,而且你不能在未聲明之前調用這樣也會報錯(這點類似于function,叫什么暫時性死區,這話跟function那個不搭),反正意思就是有let的地方,let聲明的變量就是小公主,人是最大的,最好的,必須要不一樣,必須要讓人排前面。

? ? ?const呢,跟let差不多,但是它聲明一個只讀變量,而且你聲明的時候就得進行初始化,不然就給你報錯。當然const聲明的變量呢簡單數據就是內存中存儲變量值,復雜的數據呢內存中存的是地址,這也就造成了const聲明的簡單數據不可改變,而復雜的數據你還可以往里面扔點數據屬性啥的,畢竟只要內存中的地址不變,你隨便搞。其他的大致跟let命令差不多。

? ? ? ?根據let、const和var,還有這些個作用域的劃分,大致以后window(瀏覽器端)就不能當全局對象使了,畢竟你搞個let塊里面的命令window也讀不到,但是好像global(node端)要當全局對象使了,不過這些都是看大佬的文章說的,至于是不是那樣我就不知道了。

? ? ? ? 接下來說解構賦值,數組的結構賦值就是根據對應位置為對應變量賦值,如果對應位置取不到值那么就賦值為undefined;對象的解構賦值就是根據對應的key提取value值賦給對應變量值,取不到對應的值就賦給undefined;函數的解構賦值就是按照參數對應數組或者對象的解構賦值綜合起來進行的;解構賦值還可以給它賦默認值(類似于初始化),而且還可以用嵌套賦值(說白了就是取對象的某個屬性)。至于像字符串的解構賦值就是將字符串轉為數組取里面對應位置的值或者屬性,而number和boolean則是轉為對象再去按照對象解構賦值方法取搞,null和undefined無法轉為對象和數組所以你要是瞎搞就報錯。還有就是小心圓括號造成的問題,聲明的變量 函數的參數和賦值語句只要和值的類型不對應都會出錯,所以一定要注意!!!!

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容