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

来源整理自:我的有道云笔记