程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> javascript 兩種聲明函數的方式的剖析

javascript 兩種聲明函數的方式的剖析

編輯:關於C++

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

看到後果大家應該都明白了吧。

感激閱讀,希望能協助到大家,謝謝大家對本站的支持!

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved