javascript 兩種聲明函數的方式的剖析。本站提示廣大學習愛好者:(javascript 兩種聲明函數的方式的剖析)文章只能為提供參考,不一定能成為您想要的結果。以下是javascript 兩種聲明函數的方式的剖析正文
javascript 聲明函數
JavaScript有兩種聲明函數的方式,一個是函數表達式定義函數,也就是我們說的匿名函數方式,一個是函數語句定義函數,上面看代碼:
/*方式一*/ var FUNCTION_NAME = function() { /* FUNCTION_BODY */}; /*方式二*/ function FUNCTION_NAME () { /* FUNCTION_BODY */};
區別一
方式一的聲明方式是先聲明後運用
方式二的聲明方式可以先調用,後聲明
/*方式一: *先聲明後運用 */ //f1();這裡調用就會出錯 var f1 = function () { alert("var方式"); } f1();//這裡運用才正確 /*方式二: *可以先運用後聲明 */ f2(); //這裡調用可以正常執行 function f2 () { alert("function方式"); } f2();//這裡調用可以正常執行
區別二
//方式一 var FUNCTION_NAME = function() { /* FUNCTION_BODY */}; /* 這種方式,編譯後變量聲明 FUNCTION_NAME 會“被提早”了,但是他的賦值(也就是FUNCTION_BODY)並不會被提早。匿名函數只要在被調用時才被初始化。 */ //方式二 function FUNCTION_NAME () { /* FUNCTION_BODY */}; /* 這種方式, 編譯後 函數聲明 和 賦值 都會被提早。 即函數聲明進程在整個順序執行之前的預處置就完成了,所以只需處於同一個作用域,就可以訪問到,即便在定義之前調用它也可以。 */
上面看一個例子:
function f() { alert('1'); } f(); // 彈窗內容是:2 function f() { alert ('2'); }
運轉時 f() 執行的是alert (‘2');次要緣由是JavaScript 函數聲明的“提早”行為,簡而言之,就是Javascript允許我們在變量和函數被聲明之前運用它們,而第二個定義掩蓋了第一種定義。換句話說,上述代碼編譯之後相當於:
function f() { alert('1'); } function f() { alert ('2');//聲明前置了,但由於這裡的聲明和賦值在一同,所以一同前置 } f(); // 彈窗內容是:2
上面再看一個例子:
var f= function() { alert('1'); } f(); // 彈窗內容是:1 function f() { alert ('2'); }
這裡就是我們等待的behavior,這段順序編譯之後相當於:
var f; //聲明前置了 function f() { alert('1'); } f(); // 彈窗內容是:1 function f() { alert ('2'); }
最後再看一個例子:
f(); //第一次調用函數 彈窗內容是:2 var f= function() { alert('1'); } f(); //第二次調用函數 彈窗內容是:1 function f() { alert ('2'); } f(); //第三次調用函數 彈窗內容是:1
看到後果大家應該都明白了吧。
感激閱讀,希望能協助到大家,謝謝大家對本站的支持!