# no-caller
禁止使用 arguments.caller
或 arguments.callee
arguments.caller
和 arguments.callee
的使用使得一些代码优化变得不可能。它们在 JavaScript 的未来版本中已被弃用,并且在 ECMAScript 5 中在严格模式下禁止使用它们。
function foo() {
var callee = arguments.callee;
}
# 规则详情
该规则旨在通过禁止使用 arguments.caller
和 arguments.callee
来阻止使用已弃用和次优的代码。因此,它会在使用 arguments.caller
和 arguments.callee
时发出警告。
此规则的错误代码示例:
/*eslint no-caller: "error"*/
function foo(n) {
if (n <= 0) {
return;
}
arguments.callee(n - 1);
}
[1,2,3,4,5].map(function(n) {
return !(n > 1) ? 1 : arguments.callee(n - 1) * n;
});
此规则的正确代码示例:
/*eslint no-caller: "error"*/
function foo(n) {
if (n <= 0) {
return;
}
foo(n - 1);
}
[1,2,3,4,5].map(function factorial(n) {
return !(n > 1) ? 1 : factorial(n - 1) * n;
});