JavaScript中的caller和callee
阿新 • • 發佈:2018-11-12
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);