JS 中 callee 与 caller 的作用
1. caller
返回一个调用当前函数的引用。如果是由顶层调用则返回 null。
通俗理解:caller 就是给你打电话的人,谁调用了你。
var callerTest = function () {
console.log(callerTest.caller);
};
function a() {
callerTest();
}
a(); // 输出 function a() { callerTest(); }
callerTest(); // 输出 null(顶层调用)
2. callee
返回一个正在被执行的 Function 对象(函数引用)。常用来递归匿名函数本身,但在严格模式下不可用。
callee 是 arguments 对象的一个成员,表示对函数对象本身的引用。它有一个 length 属性,代表形参的长度。
var c = function (x, y) {
console.log(arguments.length, arguments.callee.length, arguments.callee);
};
c(1, 2, 3); // 3, 2, function (x, y) { console.log(arguments.length, arguments.callee.length, arguments.callee) }
注意:严格模式下
arguments.callee访问会报错。匿名函数递归请改用:
const factorial = function f(n) {
return n <= 1 ? 1 : n * f(n - 1);
};
factorial(5); // 120
来源整理自:我的有道云笔记



