2009年7月30日 星期四

javascript(5) - function


在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]);



沒有留言:

張貼留言

熱門文章