1. 程式人生 > >JavaScript中的caller和callee

JavaScript中的caller和callee

caller 返回一個呼叫當前函式的引用(caller就是給你打電話的人,誰給你打電話,誰就呼叫了你),在瀏覽器中,如果呼叫當前函式的是window,則返回null;

function fn() {
    console.log(fn.caller);
}
fn();   // window呼叫了fn,返回null;
function fn() {
    console.log(fn.caller);
}
function fun() {
    fn();
}
fun();  // 此時fun呼叫了fn,返回fun,即 function fun() {fn()};

callee 是arguments的一個屬性,它返回正在執行的當前函式本身的引用;

注意:
1. callee只有在函式執行時才有效;
2. 它有一個length屬性,可以表示形參的個數;

function fn() {
    console.log(arguments.callee);
};
fn();   //返回 function fn() {console.log(arguments.callee);}

callee 的用途:

1. 遞迴

下面一個經典的階乘(遞迴)

function fn(num) {
    if(num <= 1
) { return 1; }else { return num * fn(num - 1); } } fn(5); //5*4*3*2*1=120

為避免函式名修改導致函式內部報錯,可以改成一下寫法

function fn(num) {
    if(num <= 1) {
        return 1;
    }else {
        return num * arguments.callee(num - 1);
    }
}
fn(5);  //5*4*3*2*1=120

2. length 的用法

function fn
(
a, b, c) { // 實參長度為 2 console.log(arguments.length); // 形參長度為 3 console.log(arguments.callee.length); } fn(0, 1);