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;
});