arguments對象,caller 和 callee

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

相關文章
相關標籤/搜索