Skip to content
← Back to rules

eslint/no-caller 正しさ

This rule is turned on by default.

何をするか

arguments.callerarguments.callee の使用を禁止します。

なぜ問題なのか

arguments.caller および arguments.callee の使用は、いくつかのコード最適化を不可能にします。これらは JavaScript で非推奨されており、厳格モードでは使用が禁止されています。

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

このルールは、非推奨かつ効率が悪いコードの使用を妨げるために設計されており、arguments.caller および arguments.callee の使用を禁止しています。そのため、これらのプロパティが使用された場合、警告が発生します。

詳しくは MDN のドキュメント を参照してください。

このルールに対して誤りなコードの例:

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

使い方

設定ファイルまたは CLI でこのルールを有効化するには、次のようにします:

json
{
  "rules": {
    "no-caller": "error"
  }
}
bash
oxlint --deny no-caller

参照