變量提升和函數(shù)表達式

先讓我們來看個題,測試以下我們的能力:

var getName = function () { alert (1);};
function getName() { alert (2);}

getName();

大家作出答案了嗎?沒做出來,不要急,下面我們就一起來分析以下。

變量聲明提升

即所有聲明變量或聲明函數(shù)都會被提升到當前函數(shù)的頂部。

例如:

console.log(x);
var x;
x=0;

瀏覽器在執(zhí)行的時候,js引擎會把聲明語句提到最前面,如下:

var x;
console.log(x);
x=0;

函數(shù)表達式

var getNamefunction getName都是聲明語句,區(qū)別在于var getName是函數(shù)表達式,而function getName是函數(shù)聲明。
函數(shù)表達式最大的問題在于,會將js會將此代碼分為兩行執(zhí)行。

例如:

console.log(x);
var x = 1;
function x(){}

實際執(zhí)行的代碼為,先將var x = 1拆分為var xx = 1兩行,然后將var x = 1function x(){}提升至前兩行。

所以最終函數(shù)聲明的x覆蓋了變量聲明的x,log輸出為x函數(shù)。

同理,上題的實際執(zhí)行代碼為:

var getName;//只提升變量聲明
function getName(){//提升函數(shù)聲明,覆蓋var的聲明
    alert|(2);p
}
getName = function(){//最終的賦值再次覆蓋function getName聲明
    alert(1);
}

getName()//1
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容