首頁 >web前端 >js教程 >函數宣告與函數表達式有什麼區別

函數宣告與函數表達式有什麼區別

一个新手
一个新手原創
2017-10-10 10:24:581999瀏覽


一、定義函數的方式

定義函數有兩種方式:函數宣告和函數表達式。
函數宣告的語法是這樣的:

function functionName(arg0,arg1){//函数体}

首先是function關鍵字,然後是函數的名字,這就是指定函數名稱的兩種方式。關於函數聲明,他最重要的一個特徵,就是函數聲明提升,意思是會在執行程式碼前讀取函數宣告。這就意味著可以把函數宣告放在呼叫它的語句後面。如:

a();function a(){alert("a");}//a

這個範例不會出錯,因為在執行程式碼前就會先讀取函數宣告。
第二種創建函數的方式是函數表達式,以下是最常見的一種方式:

var a = function(arg0,arg1){//函数体};

這種形式看起來就像常規的變數賦值語句,即創建一個函數並把它賦值給變數a,這種情況下創建的函數叫做匿名函數,因為function關鍵字後面沒有標識符。
函數表達式與其他表達式一樣,在使用前必須賦值。下面的程式碼會導致錯誤:

a();var a = function(){alert("a");};//错误//补充说明:使用该方法定义函数,只有变量声明提前了,变量初始化代码仍在原来的位置

二、 函數宣告與函數表達式的差異

1、函數宣告中函數名稱是必須的,函數表達式中則是可選的。

//函数声明
    function sum(a, b) {
        return a + b;
    }
    alert(sum(1, 2));
//函数表达式
    /* var s = function sum(a, b) {
        return a + b;
    }
    alert(s(1, 2)); */

    var s = function(a, b) {
        return a + b;
    }
    alert(s(1, 2));    //以上两种都可以

2、用函數宣告定義的函數,函數可以在函數宣告之前調用,而用函數表達式定義的函數則只能在宣告之後調用。

根本原因在於解析器對於這兩種定義方式讀取的順序不同:解析器會實作讀取函數聲明,即函數聲明放在任意位置都可以被呼叫;而對於函數表達式,解析器只有在讀到函數表達式所在那一行時才會開始執行(詳情請看第一部分「函數定義的方式」)。

以上是函數宣告與函數表達式有什麼區別的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn