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