【JavaScript】callee 與 caller
阿新 • • 發佈:2019-05-20
callee
callee是函式引數arguments物件的一個屬性,它指向引數arguments物件所在的函式自身。
function foo (x) {
console.log(arguments.callee);
return x;
}
foo();
從控制檯中可以看到列印的結果為:
ƒ foo (x) {
console.log(arguments.callee);
return x;
}
它的作用就是在函式內部通過呼叫arguments.callee()來代替呼叫函式自身foo()。舉個栗子,寫一個階乘函式:
function sum(num){ if(num <= 1){ return 1; }else{ // 以往的遞迴寫法 // return num * sum(num-1); return num * arguments.callee(num-1); } } console.log(sum(3)); // 列印結果為 6
caller
caller是函式物件的一個屬性,該屬性儲存著呼叫當前函式的物件,還是舉個栗子:
function foo (x) {
console.log(foo.caller);
return x + 1;
}
function too () {
foo(3)
}
too();
列印結果為:
ƒ too () {
foo(3)
}
因為foo函式是在too函式內部呼叫的,那麼呼叫foo函式的物件即為too,所以caller指向的就是too