一、var和let var已經在JavaScript中存在很長一段時間了,但是它存在了一些不足的地方,接下來我們就來看看吧 首先var存在變數提升,這是怎麼一回事呢,我們看下麵代碼 為什麼是它呢,是因為變數a提升到前面去了,所以輸出了這個結果 接下來我們再看let 初始化無法訪問到 a let是不是 ...
一、var和let
var已經在JavaScript中存在很長一段時間了,但是它存在了一些不足的地方,接下來我們就來看看吧
首先var存在變數提升,這是怎麼一回事呢,我們看下麵代碼
為什麼是它呢,是因為變數a提升到前面去了,所以輸出了這個結果
接下來我們再看let
初始化無法訪問到 a
let是不是變數聲明很好,這是ES6中為了使我們的編程更加的規範而提出的。變數的使用在聲明之後更加的規範
如果存在於塊級作用域中l,接下來看代碼
在上面的塊中我們的let存在於裡面,在外層我們是讀取不到的
那我們的var怎麼樣,看下麵
接下來我們就要說說let是存在一個“暫時性死區”的,就是說在變數使用let聲明的話必須是在聲明之後調用而且必須是在當前的塊中才可以的,不然就會出現未定義。
而且我們的let是不能進行重覆shengsheng聲明的,不然也是會報錯的。當然var就不會出現這個問題了。
好了,以上就介紹的差不多了,需深刻領會的必須自己進行實踐才可以的
二、const
const和我們的let是一樣的不能進行重覆聲明,也存在“暫時性死區”,而且const的話就相當於C語言中定義的一個常數而不能進行改變,並且const聲明後不賦值就會報錯的。
如果const是一個數組或者是一個對象,那麼可以向裡面添加屬性或者時內容的,接下來我們看下麵的代碼了。
好了,我們的const介紹到這裡吧。
三、function和class
為什麼我把他們連到一起來說,因為我們的class實際上就是我們的function構成的
這裡還要說一下我們的function的聲明實際上需要往好的方式來進行寫的,為什麼這麼來說?
我們需要將function聲明的進行如下方式來書寫
為什麼我們這麼來寫呢,因為這是在塊級作用域中來進行書寫的,讓let給一個聲明就不會出現變數的提升。
當然現在由於我們的瀏覽器和編譯環境(這裡指的node等等)的問題他們的規範是不一樣的,有些聲明的函數直接是當做var,或者是let來的。所以我們儘量不要在塊區域來聲明函數,儘量在全局
來進行聲明,如果要聲明就是上面的那種方式了。
好了接下來說說我們的class,直接看代碼吧
constructor就是我們的構造器,它是預設存在的,那麼this的指向呢,當然是我們的Person了。接下來還有下麵的方式
裡面新增加的函數直接書寫成上面的方式即可,還有靜態strict的書寫方式,這裡我就不在舉例了。看了上面的代碼,我相信這種類的方式是對我們以後代碼的編寫是很有幫助的。
說到這裡我想到了函數裡面的prototype,實際上我們的類就是居於這個原理來實現的,我們還是來看看代碼吧
這個有點像原型鏈調用的方式,還有繼承的問題,這裡就不做過多的闡述了。具體的需要自己去實踐才可以出真理的吧。
四、import
靜態的import
語句用於導入由另一個模塊導出的綁定,它是在嚴格模式下運行的,如下代碼
看下官方的語法:
import defaultExport from "module-name";
當然在瀏覽器中,import
語句只能在聲明瞭type="module"
的script
的標簽中使用。我們做項目使用VUE,react框架時使用這些就比較常見,好了我就不過多介紹了,有興趣的話可以在去理解理解