函數的callee和caller

callee是函數的arguments這個特殊對象的一個屬性,它會指向這個arguments對象的函數:函數

function fn1(){
    console.log(arguments.callee);        //輸出函數fn1自己
}
fn1()
callee的能夠消除函數內部調用本身的耦合性,
 
var num = 3
function fn1(num){
    if(num <= 1){
        return 1
    }else{
        return num * fn1(num-1)
    }
}
//可使用callee
function fn1(num){
    if(num <= 1){
        return 1
    }else{
        return num * arguments.callee(num-1)
    }
}

還可使用callee查看形參與實參的個數差異spa

function fn2(a,b,c){
    console.log('實參數:',arguments.length);            //2
    console.log('行參數:',arguments.callee.length);       //3
}
fn2(1,2)
 
函數對象還有一個caller屬性,該屬性指向調用當前函數的引用,也就是調用當前函數的函數。但若是要是在全局中調用當前函數,caller的值就是null:
function fn1(){
    console.log(fn1.caller);       //fn1的caller屬性指的是函數fn2
    console.log(arguments,callee.caller)    //同上,使用arguments的callee屬性,指的是當前函數,當前函數的caller屬性,指的是其調用者,也就是函數fn2
}
function fn2(){
}
fn2()
相關文章
相關標籤/搜索