JavaScript系列文章-『Arguments、callee、caller的運用』
Arguments物件:
Arguments是Javascript所定義的一個參數管理物件,實際使用有點類似陣列,可以透過陣列下標的型式獲得『參數值』,請參考下面的程式碼。
function method()
{
console.log(arguments);
for (var i = 0; i < arguments.length; i++) {
console.log(arguments[i]);
};
}
method(1,2,3)
上面程式碼用for迴圈將arguments裡的參數取出,首先第一行 console.log(arguments) 就是直接將
arguments輸出,可以從輸出結果看一個很像陣列型態的結果,接下來在用arguments[i]將指定位置的值取出。
輸出結果
可運用此物件撰寫成多型的函式:
function method()
{
for (var i = 0; i < arguments.length; i++) {
console.log(arguments[i]);
};
}
method(1,2,3)
console.log("==============");
method(1,"hello");
console.log("==============");
method(1,2,3,4,5)
輸出結果
Arguments特性:
1.Arguments 物件僅能夠在函數體內使用,它僅作為函數體的一個私有成員而存在。
2.透過陣列的形式來參考Arugments物件所包含的實際參數值。
callee:
為arguments的屬性之一,可取得被call function本身。
caller:
可用來取得call該function的來源物件。
我們將用以下的程式碼,來更了解callee與caller的運用。
function method(a, b, c) {
console.log(arguments.callee);
console.log(arguments.caller);
console.log(arguments.callee.caller);
console.log('宣告參數長度--'+arguments.callee.length);
console.log('實際參數長度--'+arguments.length);
console.log('callmethod的參數長度--' + arguments.callee.caller.length)
console.log(a);
console.log(b);
console.log(c);
}
function callmethod(a)
{
method(1,3);
}
callmethod();
輸出結果。
程式說明
arguments.callee
取得arguments所處的function
=> method
arguments.caller
取得呼叫某function的來源物件,因arguments不是function因此輸出為
=> undefined
arguments.callee.caller
取得arguments所處的function => method
然後在取得呼叫method的function因此輸出為=> callmethod
arguments.callee.length
為取得arguments所處的function => method
然後取得它所宣告的參數長度 => 3
arguments.length
為取得arguments裡的參數長度。
=> 2
arguments.callee.caller.length
取得arguments所處的function => method
然後在取得呼叫method的function => callmethod
最後在取得callmethod的宣告參數長度因此輸出為 => 1
參考資料
http://www.w3schools.com/js/js_function_parameters.asp
http://msdn.microsoft.com/zh-tw/library/7t96kt3h(v=vs.94).aspx