arguments.callee.caller

1.Arguments
Arguments是一個相似數組但不是數組的對象,說它相似數組是由於其具備數組同樣的訪問性質及方式,能夠由arguments[n]來訪問對應的單個參數的值,並擁有數組長度屬性length。還有就是arguments對象存儲的是實際傳遞給函數的參數,而不侷限於函數聲明所定義的參數列表,並且不能顯式建立 arguments對象。arguments對象只有函數開始時纔可用。javascript

function ArgTest(a, b){
   var i, s = "The ArgTest function expected ";
   var numargs = arguments.length;     // 獲取被傳遞參數的數值。
   var expargs = ArgTest.length;       // 獲取指望參數的數值。
   if (expargs < 2)
        s += expargs + " argument. ";
   else
        s += expargs + " arguments. ";
   if (numargs < 2)
        s += numargs + " was passed.";
   else
        s += numargs + " were passed.";
     s += " "
   for (i =0 ; i < numargs; i++){      // 獲取參數內容。
     s += "    Arg " + i + " = " + arguments[i] + " ";
     }
   return(s);                          // 返回參數列表。
}

2.caller
返回一個對函數的引用,該函數調用了當前函數。
functionName.caller
functionName 對象是所執行函數的名稱。
對於函數來講,caller屬性只有在函數執行時纔有定義。若是函數是由頂層調用的,那麼 caller包含的就是 null 。
3.callee
返回正被執行的 Function 對象,也就是所指定的 Function 對象的正文。
callee屬性是 arguments 對象的一個成員,它表示對函數對象自己的引用,這有利於匿名函數的遞歸或者保證函數的封裝性。
arguments.length是實參長度,arguments.callee.length是形參長度,由此能夠判斷調用時形參長度是否和實參長度一致。java

function calleeDemo() {
      alert(arguments.callee);
}
//用於驗證參數
function calleeLengthDemo(arg1, arg2) {
    if (arguments.length==arguments.callee.length) {
          window.alert("驗證形參和實參長度正確!");
        return;
      } else {
          alert("實參長度:" +arguments.length);
          alert("形參長度: " +arguments.callee.length);
      }
}
本站公眾號
   歡迎關注本站公眾號,獲取更多信息