JavaScript系列文章-『Arguments、callee、caller的運用』

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]將指定位置的值取出。

 

輸出結果

ScreenClip1

 

可運用此物件撰寫成多型的函式:

 

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)

 

輸出結果

ScreenClip2

 

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();

 

輸出結果。

ScreenClip3

 

程式說明

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://fstoke.me/blog/?p=1932

http://www.w3schools.com/js/js_function_parameters.asp

http://msdn.microsoft.com/zh-tw/library/7t96kt3h(v=vs.94).aspx

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions_and_function_scope/arguments/callee

 



小弟才書學淺~請各位客官指教指教~~~

小弟日 : 你要知道自已不是帥哥,你才有可能變成帥哥 。