最新的Web開發教程
 

JavaScript函數定義


JavaScript函數與定義function關鍵字。

您可以使用函數聲明或函數表達式


函數聲明

在本教程的前面,你了解到函數的語法如下聲明

function functionName ( parameters ) {
  code to be executed
}

聲明的函數不立即執行。 他們是“保存以備後用”,並且將在以後執行,當他們被調用(呼籲)。

function myFunction(a, b) {
    return a * b;
}
試一試»

分號用於分隔執行JavaScript語句。
由於函數聲明不是可執行語句,它不是常見的以分號結束它。


函數表達式

一個JavaScript功能也可使用表達式定義。

函數表達式可以被存儲在一個變量:

var x = function (a, b) {return a * b};
試一試»

函數表達式已經被存儲在一個變量之後,該變量可以作為一個功能:

var x = function (a, b) {return a * b};
var z = x(4, 3);
試一試»

上面的函數實際上是一個匿名函數 (沒有名字的函數)。

存儲在變量的函數不需要函數名。 他們總是調用(調用)使用變量名。

因為它是一個可執行語句的一部分,上面的函數以一個分號結束。


Function()構造函數

正如你在前面的例子中所看到的,JavaScript函數與定義的function關鍵字。

函數也可以用內置的JavaScript函數構造器調用定義Function()

var myFunction = new Function("a", "b", "return a * b");

var x = myFunction(4, 3);
試一試»

你其實不必使用函數構造函數。 上面的例子是一樣的文字:

var myFunction = function (a, b) {return a * b};

var x = myFunction(4, 3);
試一試»

在大多數情況下,你可以盡量避免使用new JavaScript中的關鍵字。


Function Hoisting

在本教程早些時候,您了解了"hoisting"

起重是JavaScript的移動聲明到當前範圍的頂部的默認行為。

起重適用於變量聲明和函數聲明。

正因為如此,JavaScript函數可以在聲明之前被調用:

myFunction(5);

function myFunction(y) {
    return y * y;
}

使用表達式定義的函數不懸掛。


自調用函數

函數表達式可以做成“自我調用”。

一個自調用表達式自動調用(啟動),沒有被調用。

如果表達式後跟函數表達式將自動執行()

你不能自調用函數聲明。

你必須添加周圍功能括號以表明它是一個函數表達式:

(function () {
    var x = "Hello!!";      // I will invoke myself
})();
試一試»

上面的函數實際上是一個匿名的自調用函數 (沒有名字的函數)。


函數可以用作值

JavaScript函數可以被用作值:

function myFunction(a, b) {
    return a * b;
}

var x = myFunction(4, 3);
試一試»

JavaScript函數可以在表達式中使用:

function myFunction(a, b) {
    return a * b;
}

var x = myFunction(4, 3) * 2;
試一試»

函數是對象

typeof在JavaScript中運算符返回"function"的功能。

但是,JavaScript函數可以被描述為對象。

JavaScript函數同時擁有屬性方法

arguments.length屬性返回被調用函數時收到的參數個數:

function myFunction(a, b) {
    return arguments.length;
}
試一試»

toString()方法返回函數的字符串:

function myFunction(a, b) {
    return a * b;
}

var txt = myFunction.toString();
試一試»

定義為一個對象的屬性的函數,稱為對象的方法。
旨在創建新的對象的函數,稱為對象的構造函數。