跳至内容

eslint/no-caller 正确性

此规则默认处于开启状态。

作用

禁止使用 arguments.callerarguments.callee

为什么这样做很糟糕?

使用 arguments.callerarguments.callee 会导致几种代码优化变得不可行。它们在未来版本的 JavaScript 中已被弃用,且在使用严格模式时,在 ECMAScript 5 中禁止使用它们。

js
function foo() {
  var callee = arguments.callee;
}

此规则旨在通过禁止使用 arguments.callerarguments.callee 来阻止使用已弃用且不够优化的代码。因此,当使用 arguments.callerarguments.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;
});

参考

根据 MIT 许可证发布。