2008年12月4日

function

一段執行特定功能的指令集,可以寫成函式,並賦予名稱。如此只要一份程式碼,就可以在程序中多處使用。

function 指令 | Function 物件製造器 | function 計算器 | arguments | 自呼迴圈 | 多層巢的函式
function 指令
  1. 函式可用指令 function 宣告,其基本語法是:

    function 名稱( 參數1, 參數2, ..., 參數n) { 指令集; }

    用指令宣告函式,可以在宣告前呼用,這與其它宣告法不同。函式的名稱與參數的名稱,要符合識別名的規定,不可用保留字。用指令宣告函式時,同時產生一個變數,與函式同名,內存函式的定義。

    指令宣告法只能用在來源元件。來源元件是指最上層區塊中的指令,也包括指令 function 的第一層區塊。其它 if, for, switch 等指令的區塊,都不是最上層區塊,所以在其中不可用指令 function 宣告函式;要用 Function 物件製造器 或 function 計算器,產生函式。

  2. 有些版本的 javascript 支援有條件的宣告函式。下面的例子,不符合來源元件,但是 IE, Firefox, Chrome 都有支援。

    • Safari 不支援上法;IE, Firefox, Chrome 都宣告成功。

  3. 函式可以宣告多個參數,最多可有 255 個參數。每次呼用函式時,可以給予不同的參數值。

    基本型態的變數被設為參數,會將變數的值,傳給函式中的新變數;新變數被更改時,不會影響原來的變數。如果物件實體,陣列,文法規則計算式被設為參數,會將其記憶體位置傳給函式。函式會經由此記憶體位置,直接改變原物件,原陣列。

  4. 函式可以使用 return 回傳結果。

Function 物件製造器

可用 Function 物件製造器 宣告函式。在 javascript 中,每個函式都是 Function 的物件實體。使用製造器宣告函式,不會繼承上層區間。使用製造器宣告的函式,每次呼用時,都要重新解讀其字串,建立函式;較它法多消耗處理器時間,建議少用。其語法是:

變數=new Function(參數1, 參數2, ..., 參數n, 指令集);

上面的參數與指令集,都放在字串中。數個參數可以放在一個字串,也可以分開放。可以省略 new。

function 計算器

可用 function 計算器,在計算式中宣告函式,存入變數中。其語法是:

變數=function [函式名稱](參數1, 參數2, ..., 參數n) 指令集;

函式名稱可以不宣告。如果此處宣告函式名稱,只能用在函式區內,在區外呼用函式名稱,會導致錯誤。可用變數名稱呼用函式。指令集有多個指令時,可用 { } 包夾。可用 function 計算器將多個函數存入陣列中。在物件中宣告方法,也要用到 function 計算器。使用 function 計算器宣告函式,會繼承上層區間。

  • 上例中,有宣告函式名稱 bcc。IE 可以在區外呼叫 bcc();Firefox, Safari, Chrome 無法在區外呼用,還會導致錯誤。

arguments

可以用物件 arguments 取用參數,這可以用在參數個數變動的情形。物件 arguments 有三個特徵:

  1. arguments.callee:參數所在的函式。
  2. arguments.caller:呼叫此函式的前函式。此項已廢止,可以改用 函式名稱.caller
  3. arguments.length:參數個數。

物件 arguments 不是陣列物件(Array),所以陣列物件的特徵與方法不能用在 arguments。arguments 只能在函式區內使用。

舊版的 javascript 是把 arguments 當作函式物件的特徵;取用 arguments 時,要加上函式名稱,例如 myFunc.arguments[0]。另有舊版中,函式的正式參數與區內變數,都是 arguments 的特徵,例如 arguments.var1。這些在新版 javascript 可能已拿掉。

  • 上例中,使用 arguments.caller, arguments.ttl,新版的 javascript 會印出 undefined。IE 有支援 arguments.caller。Firefox, Safari, Chrome 都印出 undefined。

自呼迴圈

函式可以呼用自己形成迴圈(recursion)。自呼迴圈必須注意控制終點值。自呼迴圈最適合用在樹枝結構的搜尋。

在一個函式中,達成自呼迴圈,有三種呼用方法:函式自己的名稱,arguments.callee,存有函式的變數。

多層巢的函式

函式中可以宣告函式,可以有多層巢的函式宣告。函式內宣告的函式,只限區內使用。內層的函式可以使用外層函式的變數與參數;外層的函式不能使用內層函式的變數與參數。多層巢的函式佔用大量記憶體,建議少用。

呼用外層函式時可以直接設定內層函式的參數,例如 outer(外層參數)(內層參數),第二個括號 ( ) 設定內層函式的參數;此時要用 return 呼用內層函式,參見下例。


©2008-2009 by ant2legs, All Rights Reserved. ant2legs 擁有其製作的文章,圖片與程式的著作權,所有權利保留。