一.函數(shù)
函數(shù)是由這樣的方式進(jìn)行聲明的:關(guān)鍵字 function、函數(shù)名、一組參數(shù),以及置于括號中的待執(zhí)行代碼。
函數(shù)的基本語法:
function ?name ?( arg0 , arg1 , ... , argN ) {
statement
}
二.arguments對象
在函數(shù)代碼中,使用特殊對象 arguments,開發(fā)者無需明確指出參數(shù)名,就能訪問它們。
例如:arguments [ 0 ],代表函數(shù)中第一個(gè)參數(shù)。
屬性 arguments.length 可以檢測函數(shù)的參數(shù)個(gè)數(shù)。
函數(shù)重載:
function ?do ( ) ?{
if ( arguments.length ?== 1 ) ?{
alert ( arguments [ 0 ] ?+ ?1 ) ;
}
else ?if ( arguments.length? == 2 )? {
alert ( arguments [ 0 ]? +? 10) ;
}
}
do ( 5 ) ; ? ? ? ? // 輸出6
do ( 6 , 8) ; ? ? // 輸出16
三.Function 對象(類)
Function 類可以表示開發(fā)者定義的任何函數(shù)。
用 Function 類直接創(chuàng)建函數(shù)的語法如下:
var function_name ?= ?new function (?arg1,?arg2, ?... ,?argN?,function_body?)
在上面的形式中,每個(gè)arg都是一個(gè)參數(shù),最后一個(gè)參數(shù)是函數(shù)主體(要執(zhí)行的代碼)。這些參數(shù)必須是字符串。
四.閉包
閉包,指的是詞法表示包括不被計(jì)算的變量的函數(shù),也就是說,函數(shù)可以使用函數(shù)之外定義的變量。
例如:
var iBaseNum = 10;
function addNum(iNum1, iNum2) {
? ? ?function doAdd() {
? ? ? ? ? return iNum1 + iNum2 + iBaseNum;
? ? ?}
? ? ?return doAdd();
}
這里,函數(shù) addNum() 包括函數(shù) doAdd() (閉包)。內(nèi)部函數(shù)是一個(gè)閉包,因?yàn)樗鼘@取外部函數(shù)的參數(shù) iNum1 和 iNum2 以及全局變量 iBaseNum 的值。 addNum() 的最后一步調(diào)用了 doAdd(),把兩個(gè)參數(shù)和全局變量相加,并返回它們的和。
這里要掌握的重要概念是,doAdd() 函數(shù)根本不接受參數(shù),它使用的值是從執(zhí)行環(huán)境中獲取的。
可以看到,閉包是 ECMAScript 中非常強(qiáng)大多用的一部分,可用于執(zhí)行復(fù)雜的計(jì)算。
提示:就像使用任何高級函數(shù)一樣,使用閉包要小心,因?yàn)樗鼈兛赡軙兊梅浅?fù)雜。