JS中包含兩種提升,變量提升和函數(shù)提升。
變量提升
變量提升只能是var或者function聲明的變量或者函數(shù),let,const聲明的不存在提升的說(shuō)法。
顧名思義就是把下面的東西提升到上面。在函數(shù)域里定義一個(gè)和外部一樣名稱的變量時(shí),只會(huì)取到該函數(shù)域,在賦值以前的輸出為undefined。

在函數(shù)域內(nèi)的if,for,switch語(yǔ)句中的變量無(wú)論條件是否滿足都會(huì)得到提升,能夠賦值與否要看是否滿足條件。因此此處輸出為2;如果!a變?yōu)閍,則輸出為undefined.
函數(shù)提升
定義函數(shù)有兩種方式:函數(shù)聲明和函數(shù)表達(dá)式。函數(shù)聲明的函數(shù)才會(huì)提升函數(shù)(提升的其實(shí)是函數(shù)的引用,在聲明之前可以調(diào)用),函數(shù)表達(dá)式提升的其實(shí)只是一個(gè)變量(調(diào)用會(huì)報(bào)錯(cuò),因?yàn)橹皇且粋€(gè)變量)。