js中函數(shù)聲明與函數(shù)表達(dá)式
目前為止,我們一直沒(méi)有對(duì)函數(shù)聲明和函數(shù)表達(dá)式加以區(qū)別。而實(shí)際上,解析器在向執(zhí)行環(huán)境中加載數(shù)據(jù)時(shí),對(duì)函數(shù)聲明和函數(shù)表達(dá)式并非一視同仁。解析器會(huì)率先讀取函數(shù)聲明,并使其在執(zhí)行任何代碼之前可用(可以訪問(wèn));至于函數(shù)表達(dá)式,則必須等到解析器執(zhí)行到它所在的代碼行,才會(huì)真正被解釋執(zhí)行。如下例子:
alert(sum(10,10));
function sum(num1,num2)
{
return num1+num2;
}
以上代碼完全可以正確執(zhí)行,因?yàn)樵诖a開(kāi)始執(zhí)行之前,解析器就已經(jīng)通過(guò)一個(gè)名為函數(shù)聲明提升(function declaration hoisting)的過(guò)程,讀取并將函數(shù)聲明添加到執(zhí)行環(huán)境中。對(duì)代碼求值時(shí),JavaScript引擎在第一遍會(huì)聲明函數(shù)并將它們放到源代碼樹(shù)的頂部。所以,即使聲明函數(shù)的代碼在調(diào)用它的代碼后面,JavaScript引擎也能把函數(shù)聲明提升到頂部。如果像下面的例子所示,把上面的函數(shù)聲明改為等價(jià)的函數(shù)表達(dá)式,就會(huì)在執(zhí)行的時(shí)候出現(xiàn)錯(cuò)誤。
alert(sum(10,10));
var sum=function(num1,num2)
{
return num1+num2;
};
以上代碼會(huì)在運(yùn)行的時(shí)候出現(xiàn)錯(cuò)誤,原因在于函數(shù)位于一個(gè)初始化語(yǔ)句中,而不是一個(gè)函數(shù)聲明。換句話講,在執(zhí)行到函數(shù)所在的語(yǔ)句之前,變量sum中不會(huì)保存有對(duì)函數(shù)的引用;而且,由于第一行代碼就會(huì)導(dǎo)致“unexpected identifier”(意外標(biāo)識(shí)符)錯(cuò)誤,實(shí)際上也不會(huì)執(zhí)行到下一行。
除了聲明時(shí)候可以通過(guò)變量訪問(wèn)函數(shù)這一點(diǎn)區(qū)別之外,函數(shù)聲明與函數(shù)表達(dá)式的語(yǔ)法其實(shí)是等價(jià)的。
注:也可以同時(shí)調(diào)用函數(shù)聲明和函數(shù)表達(dá)式,例如 var sum=function sum(){}。不過(guò),這種語(yǔ)法在Safari中會(huì)導(dǎo)致錯(cuò)誤。
以上所述就是本文的全部?jī)?nèi)容了,希望對(duì)大家學(xué)習(xí)javascript能夠有所幫助。
相關(guān)文章
頁(yè)面圖片浮動(dòng)左右滑動(dòng)效果的簡(jiǎn)單實(shí)現(xiàn)案例
本篇文章主要是對(duì)頁(yè)面圖片浮動(dòng)左右滑動(dòng)效果的簡(jiǎn)單實(shí)現(xiàn)案例進(jìn)行了介紹,需要的朋友可以過(guò)來(lái)參考下,希望對(duì)大家有所幫助2014-02-02
JavaScript實(shí)現(xiàn)密碼框驗(yàn)證信息
這篇文章主要為大家詳細(xì)介紹了JavaScript實(shí)現(xiàn)密碼框驗(yàn)證信息,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-11-11
Taro?小程序持續(xù)集成實(shí)現(xiàn)及原理
這篇文章主要為大家介紹了Taro?小程序持續(xù)集成實(shí)現(xiàn)及原理詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-04-04
基于JS實(shí)現(xiàn)無(wú)縫滾動(dòng)思路及代碼分享
無(wú)縫滾動(dòng)效果在各大網(wǎng)站都有這樣的需求,應(yīng)用非常廣泛,下面小編給大家分享基于JS實(shí)現(xiàn)無(wú)縫滾動(dòng)思路及代碼,非常不錯(cuò)具有參考借鑒價(jià)值,感興趣的朋友一起看下吧2016-06-06
javaScript代碼飄紅報(bào)錯(cuò)看不懂?讀完這篇文章再試試
這篇文章主要介紹了javaScript代碼飄紅報(bào)錯(cuò)看不懂?讀完這篇文章再試試,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-08-08
純Javascript實(shí)現(xiàn)Windows 8 Metro風(fēng)格實(shí)現(xiàn)
Windows 8 Metro風(fēng)格設(shè)計(jì),實(shí)現(xiàn)網(wǎng)站或系統(tǒng)功能的導(dǎo)航,在本文將為大家介紹下如何用純Javascript實(shí)現(xiàn)Windows 8 Metro風(fēng)格,感興趣的朋友可以參考下2013-10-10
js限制input只能輸入有效的數(shù)字(第一個(gè)不能是小數(shù)點(diǎn))
有時(shí)候我們需要限制input只能輸入有效的數(shù)字,有且只有一個(gè)小數(shù)點(diǎn),第一個(gè)不能為小數(shù)點(diǎn),那么就可以參考下面的函數(shù)來(lái)實(shí)現(xiàn)2018-09-09
JavaScript實(shí)現(xiàn)的一個(gè)日期格式化函數(shù)分享
這篇文章主要介紹了JavaScript實(shí)現(xiàn)的一個(gè)日期格式化函數(shù)分享,本文給出了實(shí)現(xiàn)代碼和使用例子,需要的朋友可以參考下2014-12-12
在線所見(jiàn)即所得HTML編輯器的實(shí)現(xiàn)原理淺析
這篇文章主要介紹了在線所見(jiàn)即所得HTML編輯器的實(shí)現(xiàn)原理淺析,本文用初始化、打開(kāi)編輯功能、獲取編輯器的內(nèi)容、增加樣式設(shè)置、再進(jìn)一步等步驟闡述在線編輯器的基本實(shí)現(xiàn)原理,需要的朋友可以參考下2015-04-04

