函數是一組可以隨時隨地啟動並執行語句,它們是ECMAScript的核心。函數由關鍵字function、函數名加一組參數以及置於括弧中要執行的代碼聲明的。
函數的基本文法如下:
function functionName (arg0, arg1, ... ,argN) { statements }
如果函數無明確的傳回值,或調用了沒有參數的return語句,那麼它真正返回的值是undefined。
1、無重載
ECMAScript中的函數不能重載。可以使用相同的名字在同一個範圍中定義兩個函數,而不引發錯誤,但真正使用的是最後一個函數。
2、arguments對象
在函數代碼中,使用特殊對象arguments,開發人員無需明確指出參數名,就能訪問它們。arguments[0]表示第一個參數(第一個參數位於位置0,第二個參數位於位置1,依此類推)。因此無需明確具名引數,就可以重寫函數。
使用arguments對象檢測傳遞給函數的參數個數,引用屬性arguments.length。
使用arguments對象判斷傳遞給函數的參數個數,即可類比函數重載。
function doAdd () { if (arguments.length == 1) { alert(arguments[0] + 10); } else if (arguments.length == 2) { alert(arguments[0] + arguments[1]); }}
3、Function類
Function類可以表示開發人員定義的任何函數。用Function類直接建立函數的文法如下:
var function_name = new Function (argument1, argument2, argument3, ... , argumentN, function_body);
儘管可用Function建構函式建立函數,但最好不要使用它,用它定義函數比用傳統方式要慢得多。不過,所有函數都應看作是Function類的執行個體。
因為函數是參考型別,所有它們也有屬性和方法。ECMAScript定義了屬性length聲明了函數期望的參數個數。
function doAdd(iNum) { alert(iNum + 10);}alert(doAdd.length); // outputs "1"
ECMAScript函數可以接受任意多個參數(最多25個),屬性length只是為了查看預設情況下預期參數個數提供了一種便捷的方式。
Function對象也有與所有對象共用的標準valueOf()方法和toString()方法。這兩個方法返回的都是函數的原始碼,在調試時尤其起作用。
4、閉包
閉包是指詞法表示包括不必計算的變數的函數。即該函數可以使用函數外定義的變數。
在ECMAScript中使用全域變數是一個簡單的閉包執行個體。
var message = "Hello World";function() { alert(message);}