? ? ? ?今天說一下词疼,let俯树、const、var還有數(shù)組的解構賦值贰盗,不得不說上班偷偷干自己的事情還是挺爽的许饿。let、const舵盈、var這三個都可以用來聲明變量陋率,但是let和const是es6新出的玩意,而var是之前已經(jīng)都有的已經(jīng)存在的東西秽晚。關于var我們就不多說了翘贮,反正平常也是經(jīng)常用,就是聲明個變量啥的爆惧,重點還是要講一下let和const。至于解構賦值锨能,就是數(shù)組按照一定的模式從數(shù)組和對象中提取出來值然后對變量賦值扯再,其實就是找規(guī)律看眼緣。
? ? ? ?首先我們說下塊級作用域址遇,在es5呢只存在全局作用域和函數(shù)作用域熄阻,而es6中新加了個塊級作用域,原因呢就是因為原有的內(nèi)容存在著不便(這句好像是廢話)倔约;首先是原來的那些個作用域會因為這什么變量提前(就是你還沒有聲明就已經(jīng)調(diào)用)而導致數(shù)據(jù)獲取的錯誤秃殉,其次就是因為循環(huán)導致的全局變量泄漏(這個一些在for循環(huán)里做click操作什么的都知道)。所以我們引入塊級作用域浸剩,啥叫塊級作用域呢钾军,可以理解為任意兩個大括號{}之間都可以算作塊級作用域或者let和const聲明變量的地方也可以算作塊級作用域。
? ? ?let呢绢要,作用跟var類似吏恭,聲明變量,但是let聲明的變量只在let命令所在的代碼塊里面有效(let是老大在這塊)重罪,在這個代碼塊之外就不會被認識(類似于出了這個門就六親不認)樱哼,但是var不同哀九,函數(shù)作用域可以調(diào)用全局作用域聲明的變量,也可以調(diào)用自己函數(shù)作用域的變量搅幅,并且采取相同變量名的就近原則阅束,你要是這么用let,那就是報錯茄唐。而且在let的代碼塊里,let和var不能聲明同一個變量不然還是報錯息裸,而且你不能在未聲明之前調(diào)用這樣也會報錯(這點類似于function,叫什么暫時性死區(qū)琢融,這話跟function那個不搭)界牡,反正意思就是有l(wèi)et的地方,let聲明的變量就是小公主漾抬,人是最大的宿亡,最好的,必須要不一樣纳令,必須要讓人排前面挽荠。
? ? ?const呢,跟let差不多平绩,但是它聲明一個只讀變量圈匆,而且你聲明的時候就得進行初始化,不然就給你報錯捏雌。當然const聲明的變量呢簡單數(shù)據(jù)就是內(nèi)存中存儲變量值跃赚,復雜的數(shù)據(jù)呢內(nèi)存中存的是地址,這也就造成了const聲明的簡單數(shù)據(jù)不可改變性湿,而復雜的數(shù)據(jù)你還可以往里面扔點數(shù)據(jù)屬性啥的纬傲,畢竟只要內(nèi)存中的地址不變,你隨便搞肤频。其他的大致跟let命令差不多叹括。
? ? ? ?根據(jù)let、const和var宵荒,還有這些個作用域的劃分汁雷,大致以后window(瀏覽器端)就不能當全局對象使了,畢竟你搞個let塊里面的命令window也讀不到报咳,但是好像global(node端)要當全局對象使了侠讯,不過這些都是看大佬的文章說的,至于是不是那樣我就不知道了暑刃。
? ? ? ? 接下來說解構賦值继低,數(shù)組的結構賦值就是根據(jù)對應位置為對應變量賦值,如果對應位置取不到值那么就賦值為undefined稍走;對象的解構賦值就是根據(jù)對應的key提取value值賦給對應變量值袁翁,取不到對應的值就賦給undefined柴底;函數(shù)的解構賦值就是按照參數(shù)對應數(shù)組或者對象的解構賦值綜合起來進行的;解構賦值還可以給它賦默認值(類似于初始化)粱胜,而且還可以用嵌套賦值(說白了就是取對象的某個屬性)柄驻。至于像字符串的解構賦值就是將字符串轉(zhuǎn)為數(shù)組取里面對應位置的值或者屬性,而number和boolean則是轉(zhuǎn)為對象再去按照對象解構賦值方法取搞焙压,null和undefined無法轉(zhuǎn)為對象和數(shù)組所以你要是瞎搞就報錯鸿脓。還有就是小心圓括號造成的問題,聲明的變量 函數(shù)的參數(shù)和賦值語句只要和值的類型不對應都會出錯涯曲,所以一定要注意R翱蕖!;眉拨黔!