arguments.callee指向当前执行函数,用于匿名函数递归调用或解耦函数名与函数体,避免硬编码函数名。

arguments.callee 是 JavaScript 中的一个属性,指向当前正在执行的函数。它通常用在匿名函数中,用来实现递归调用或获取函数自身。
arguments.callee 的作用
在函数内部,arguments 是一个类数组对象,包含传入函数的所有参数。arguments.callee 则是其中的一个属性,表示当前执行的函数本身。
常见用途包括:
- 在没有函数名的情况下(如匿名函数),实现递归调用
- 解耦函数名与函数体,避免硬编码函数名
例如:
function factorial(n) {if (n return n * arguments.callee(n - 1);
}
这里 arguments.callee 指向 factorial 函数本身,即使函数改名也不会影响递归逻辑。
为什么不推荐使用 callee?
尽管 arguments.callee 有其用途,但在严格模式('use strict')下已被禁用,主要原因包括:
自从百度屏蔽淘宝客网站、淘宝抛弃淘宝客之后,个人站长集体陷入了恐慌之中。此时,什么值得买网的异军突起引起了广大个人站长的极大关注。做一个什么值得买一样的导购网站成了众多个人站长的一致心愿! TP-COUPON 导购系统 即是让个人站长实现此心愿的绝佳选择! 欢迎个人站长选用。V1.1版 更新记录:1.修正请求时查询淘宝店铺错误的bug2.删除一些无用的代码
- 破坏代码优化:JavaScript 引擎难以对使用 callee 的函数进行优化
- 可读性差:直接使用函数名更清晰
- 严格模式限制:ES5 之后在严格模式中调用会报错
替代方案
现代 JavaScript 推荐通过命名函数表达式或变量赋值来实现相同功能。
比如,用命名函数表达式代替:
var factorial = function me(n) {if (n return n * me(n - 1);
};
这里的 me 是函数的局部名称,只能在函数内部访问,不影响外部作用域,也支持递归。
基本上就这些。虽然 arguments.callee 曾经有用,但现在不建议使用,优先选择更清晰、兼容性更好的方式。









