arguments對象是比較特別的一個對象,arguments很是相似Array,但實際上又不是一個Array實例。javascript
它指的是函數對象裏的參數,且只能在函數內部使用。java
使用函數
檢測函數的參數個數,引用屬性 arguments.length。spa
訪問:arguments[0] code
1.arguments對象的長度是由實參個數而不是形參個數決定的。對象
function a(a,b,c){ console.log(arguments.length)
console.log(arguments[3])
b=b-a;
console.log(b)
}
a(1,2);//2 undefined 1
2.JavaScript中函數是不能重載的。blog
如何實現重載呢?遞歸
function fn(){ switch(arguments.length){ case 0: //執行語句塊 break; case 1: //執行語句塊 break; case 2: //執行語句塊 break; } }
3.arguments對象中有一個很是有用的屬性:callee。arguments.callee返回此arguments對象所在的當前函數引用。在使用函數遞歸調用時推薦使用arguments.callee代替函數名自己。ip
function a(a){ if(a==1){return 1} return a+arguments.callee(--a); } a(10);//55
function ass(a,b,s){ console.log(arguments.callee.length); console.log(arguments.length); } assl(1,2);//3 2
arguments.length是實參長度,arguments.callee.length是形參長度ssl
caller 返回一個函數的引用,這個函數調用了當前的函數。
使用這個屬性要注意:
1 這個屬性只有當函數在執行時纔有用
2 若是在javascript程序中,函數是由頂層調用的,則返回null
function b(){ a() } function a(){ alert(a===arguments.callee);//true alert(arguments.caller=b);//function b(){a()} alert(arguments.callee.caller===b);//true } b();
var a = function() { alert(a.caller); //null } a();
var a = function() {
alert(arguments.callee);
}
a();//var a = function() { alert(arguments.callee); }