在java script中,函數必須以關鍵字(key word) function開頭,function name可寫可不寫(named/anonymous function)。可以有0個以上的參數,參數會被存放於arguments中。
function f1() {
alert('f1');
}
f2 = function (x) {
alert('f2');
}; /* 注意; */
(function() {
alert('f3');
})(); /* defined anonymous function and invoke. 注意後面的(); */
f1();
f2();
arguments
當pass的參數少於function定義的參數時,少的這些參數會被視為undefined。
function pass(x) {
alert(x);
}
pass();
pass(123);
其實,function的參數會被儲存在arguments(Arguments類別)中。
function max() {
var max = arguments[0];
for (var i = 1; i < arguments.length; i++) {
if (max < arguments[i]) max = arguments[i];
}
return max;
}
alert(max(9, 7, 1, 3));
arguments並不是一個真的array,而是一個Arguments,當改變function的參數時,也會同步改變arguments。
function print(x) {
alert(x);
arguments[0] = null;
alert(x);
}
print('123');
callee
另外arguments還有另外一個常用的properties - 'callee',用於傳回正在執行的Function物件,常用於匿名的function的遞迴(recursive)。
function factorial(n) {
if (n <= 0)
return 1;
else
return n * arguments.callee(n - 1)
}
alert(factorial(3));
function's properties
function在JavaScript中算是個object,所以自然就有properties,這邊介紹幾個properties,length取得function參數數量。
var f1 = function(x) {return x * x};
var f2 = function(x, y) {return x + y};
alert(f1(3));
alert(f1.length);
alert(f2.length);
apply()/call()
call()/apply()讓使用者暫時的將function當成某個object的method.
如f.call(obj, 1, 2) 等同於
obj.m = f;
obj.m(1,2);
delete obj.m;
apply()和call()很像, 只是apply的參數必須是array
f.apply(obj, [1,2]);