函數的定義
函數的定義由以下的關鍵字所組成︰
- 函數的名稱。
- 傳給函數的參數的列表,以小括弧包夾、並以逗號分隔。
- 用來定義函數的 JavaScript 語句,以大括弧包夾 { }。在函數裡的語句裡可含有在應用程式中已定義的其他函數的呼叫。
簡單的範例
舉例來說,以下代碼定義了一個簡單的函數,名為 square︰
function square(number) { return number * number; }
函數 square
接收一個參數,稱為 number
。函數由一個語句所組成,指示要求返回函數的參數的平方。return
語句用來指定函數返回的值。
return number * number
原始的參數是以值傳遞給函數。值是傳遞給函數,但是如果函數修改了參數的值,這項改變不會影響到全域或呼叫端函數裡的值。
如果你以物件(例如,非原始值,如陣列或使用者定義的物件)作為參數來傳遞,物件的參考會被傳遞給函數。這意味著如果函數修改了物件的屬性,函數之外也看得見這項改變,如以下範例所示︰
function myFunc(theObject) { theObject.make="Toyota"; } var mycar = {make:"Honda", model:"Accord", year:1998}; var x=mycar.make; // 返回 Honda myFunc(mycar); var y=mycar.make; // 返回 Toyota(屬性已被函數修改)
注意,把新的物件代入給參數,在呼叫端將不會有任何的影響︰
function myFunc(theObject) { theObject = {make:"Ford", model:"Focus", year:2006}; } var mycar = {make:"Honda", model:"Accord", year:1998}; var x=mycar.make; // 返回 Honda myFunc(mycar); var y=mycar.make; // 仍然返回 Honda
有條件的函數的定義
函數可以根據條件來作定義。例如,給以下的函數定義︰
if (num == 0) { function myFunc(theObject) { theObject.make="Toyota" } }
myFunc
函數只會在變數 num
等於 0 時被定義。如果 num
不等於 0,函數就不會被定義,且任何企圖執行這個函數的嘗試都將會失敗。
函數的表達式
函數也可以在表達式裡來作定義。這稱為函數表達式。一般這類函數都是無名的,他沒有名稱也沒關係。例如,函數 square
可以定義成︰
var square = function(number) {return number * number};
當要傳遞函數作為參數給另一個函數時,這個作法會很方便。以下範例示範了 map 函數的定義,然後呼叫端使用無名函數作為第一個參數︰
function map(f,a) { var result=new Array; for (var i = 0; i != a.length; i++) result[i] = f(a[i]); return result; }
接著呼叫
map(function(x) {return x * x * x}, [0, 1, 2, 5, 10]);
返回 [0, 1, 8, 125, 1000]。
參閱
除了如前所述定義函數以外,你也可以定義 函數物件。
方法就是和物件相關聯的函數。你將會在 第 8 章,「物件的運用」 中學到更多有關於物件和方法。