eslint/no-caller 正确性
作用
禁止使用 arguments.caller 或 arguments.callee。
为什么这样做很糟糕?
使用 arguments.caller 和 arguments.callee 会导致几种代码优化变得不可行。它们在未来版本的 JavaScript 中已被弃用,且在使用严格模式时,在 ECMAScript 5 中禁止使用它们。
js
function foo() {
var callee = arguments.callee;
}此规则旨在通过禁止使用 arguments.caller 和 arguments.callee 来阻止使用已弃用且不够优化的代码。因此,当使用 arguments.caller 和 arguments.callee 时,它会发出警告。
示例
此规则的不正确代码示例
js
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;
});此规则的正确代码示例
js
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;
});