教育行業(yè)A股IPO第一股(股票代碼 003032)

全國(guó)咨詢/投訴熱線:400-618-4000

什么是變量提升和函數(shù)提升?真題演示

更新時(shí)間:2021年11月03日10時(shí)39分 來源:傳智教育 瀏覽次數(shù):

好口碑IT培訓(xùn)

變量提升

簡(jiǎn)單說就是在JavaScript代碼執(zhí)行前引擎會(huì)先進(jìn)行預(yù)編譯,預(yù)編譯期間會(huì)將變量聲明與函數(shù)聲明提升至其對(duì)應(yīng)作用域的最頂端,函數(shù)內(nèi)聲明的變量只會(huì)提升至該函數(shù)作用域最頂層,當(dāng)函數(shù)內(nèi)部定義的一個(gè)變量與外部相同時(shí),那么函數(shù)體內(nèi)的這個(gè)變量就會(huì)被上升到最頂端。

舉例來說:

console.log(a); //undefined
var a = 3;
//預(yù)編譯后的代碼結(jié)構(gòu)可以看做如下運(yùn)行順序
var a; // 將變量a的聲明提升至最頂端,賦值邏輯不提升。
console.log(a); // undefined
a = 3; // 代碼執(zhí)行到原位置即執(zhí)行原賦值邏輯

函數(shù)提升

·函數(shù)提升只會(huì)提升函數(shù)聲明式寫法

·函數(shù)表達(dá)式的寫法不存在函數(shù)提升

·函數(shù)提升的優(yōu)先級(jí)大于變量提升的優(yōu)先級(jí),即函數(shù)提升在變量提升之上

下面我們來看一道題。

以下代碼執(zhí)行后,控制臺(tái)的輸出是:

var a = 10;
function a(){}
console.log(typeof a)

A、“number”

B、“object”

C、“function”

D、“undefined”

正確答案:A

解題思路:

函數(shù)提升大于變量提升,變量提升會(huì)提升到除函數(shù)聲明的后面;變量提升,但是賦值不提升、函數(shù)表達(dá)式亦是如此,所以應(yīng)該是下面的步驟

function a(){}
var a;
a=10; //如果沒有這一步賦值操作的話,類型還是function
console.log(typeof a); //a=10 number


猜你喜歡

什么是事件冒泡?如何阻止事件冒泡?

如何阻止瀏覽器默認(rèn)行為和阻止事件傳播?

JS全局變量和局部變量的區(qū)別

傳智教育HTML&JS+前端課程

0 分享到:
和我們?cè)诰€交談!