MDN’s new design is in Beta! A sneak peek: https://blog.mozilla.org/opendesign/mdns-new-design-beta/

函數的定義

函數的定義由以下的關鍵字所組成︰

  • 函數的名稱。
  • 傳給函數的參數的列表,以小括弧包夾、並以逗號分隔。
  • 用來定義函數的 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 章,「物件的運用」 中學到更多有關於物件和方法。

文件標籤與貢獻者

 此頁面的貢獻者: teoli, Sheppy, Jaric, happysadman
 最近更新: teoli,