javascript 兩種聲明函數(shù)的方式的分析
javascript 聲明函數(shù)
JavaScript有兩種聲明函數(shù)的方式,一個(gè)是函數(shù)表達(dá)式定義函數(shù),也就是我們說的匿名函數(shù)方式,一個(gè)是函數(shù)語句定義函數(shù),下面看代碼:
/*方式一*/ var FUNCTION_NAME = function() { /* FUNCTION_BODY */}; /*方式二*/ function FUNCTION_NAME () { /* FUNCTION_BODY */};
區(qū)別一
方式一的聲明方式是先聲明后使用
方式二的聲明方式可以先調(diào)用,后聲明
/*方式一: *先聲明后使用 */ //f1();這里調(diào)用就會出錯(cuò) var f1 = function () { alert("var方式"); } f1();//這里使用才正確 /*方式二: *可以先使用后聲明 */ f2(); //這里調(diào)用可以正常執(zhí)行 function f2 () { alert("function方式"); } f2();//這里調(diào)用可以正常執(zhí)行
區(qū)別二
//方式一 var FUNCTION_NAME = function() { /* FUNCTION_BODY */}; /* 這種方式,編譯后變量聲明 FUNCTION_NAME 會“被提前”了,但是他的賦值(也就是FUNCTION_BODY)并不會被提前。匿名函數(shù)只有在被調(diào)用時(shí)才被初始化。 */ //方式二 function FUNCTION_NAME () { /* FUNCTION_BODY */}; /* 這種方式, 編譯后 函數(shù)聲明 和 賦值 都會被提前。 即函數(shù)聲明過程在整個(gè)程序執(zhí)行之前的預(yù)處理就完成了,所以只要處于同一個(gè)作用域,就可以訪問到,即使在定義之前調(diào)用它也可以。 */
下面看一個(gè)例子:
function f() { alert('1'); } f(); // 彈窗內(nèi)容是:2 function f() { alert ('2'); }
運(yùn)行時(shí) f() 執(zhí)行的是alert (‘2');主要原因是JavaScript 函數(shù)聲明的“提前”行為,簡而言之,就是Javascript允許我們在變量和函數(shù)被聲明之前使用它們,而第二個(gè)定義覆蓋了第一種定義。換句話說,上述代碼編譯之后相當(dāng)于:
function f() { alert('1'); } function f() { alert ('2');//申明前置了,但因?yàn)檫@里的申明和賦值在一起,所以一起前置 } f(); // 彈窗內(nèi)容是:2
下面再看一個(gè)例子:
var f= function() { alert('1'); } f(); // 彈窗內(nèi)容是:1 function f() { alert ('2'); }
這里就是我們期待的behavior,這段程序編譯之后相當(dāng)于:
var f; //申明前置了 function f() { alert('1'); } f(); // 彈窗內(nèi)容是:1 function f() { alert ('2'); }
最后再看一個(gè)例子:
f(); //第一次調(diào)用函數(shù) 彈窗內(nèi)容是:2 var f= function() { alert('1'); } f(); //第二次調(diào)用函數(shù) 彈窗內(nèi)容是:1 function f() { alert ('2'); } f(); //第三次調(diào)用函數(shù) 彈窗內(nèi)容是:1
看到結(jié)果大家應(yīng)該都明白了吧。
感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!
相關(guān)文章
C語言實(shí)現(xiàn)線性動(dòng)態(tài)(單向)鏈表的示例代碼
本文主要介紹了C語言實(shí)現(xiàn)線性動(dòng)態(tài)(單向)鏈表的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-05-05關(guān)于單片機(jī)按鍵問題性能提升總結(jié)
今天小編就為大家分享一篇關(guān)于關(guān)于單片機(jī)按鍵問題性能提升總結(jié),小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧2018-12-12C++數(shù)據(jù)結(jié)構(gòu)之二叉搜索樹的實(shí)現(xiàn)詳解
二叉搜索樹作為一個(gè)經(jīng)典的數(shù)據(jù)結(jié)構(gòu),具有鏈表的快速插入與刪除的特點(diǎn),同時(shí)查詢效率也很優(yōu)秀,所以應(yīng)用十分廣泛。本文將詳細(xì)講講二叉搜索樹的C++實(shí)現(xiàn),需要的可以參考一下2022-08-08C語言實(shí)現(xiàn)九大排序算法的實(shí)例代碼
這篇文章主要給大家介紹了關(guān)于C語言實(shí)現(xiàn)九大排序算法的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01C++實(shí)現(xiàn)LeetCode(198.打家劫舍)
這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(198.打家劫舍),本篇文章通過簡要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-08-08