Skip to content
← Back to rules

eslint/no-useless-call パフォーマンス

何をするか

.call() および .apply() への不要な呼び出しを禁止する

なぜ問題なのか

Function.prototype.call() および Function.prototype.apply() は、通常の関数呼び出しよりも遅いです。

このルールはコードを静的に比較して、thisArg が変更されているかどうかを確認します。したがって、thisArg に関するコードが動的式の場合、このルールは正しく判断できません。

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

js
// これらは `foo(1, 2, 3);` と同じです
foo.call(undefined, 1, 2, 3);
foo.apply(undefined, [1, 2, 3]);
foo.call(null, 1, 2, 3);
foo.apply(null, [1, 2, 3]);

// これらは `obj.foo(1, 2, 3);` と同じです
obj.foo.call(obj, 1, 2, 3);
obj.foo.apply(obj, [1, 2, 3]);

このルールに対して 正しい コードの例:

js
// `this` のバインディングが異なります
foo.call(obj, 1, 2, 3);
foo.apply(obj, [1, 2, 3]);
obj.foo.call(null, 1, 2, 3);
obj.foo.apply(null, [1, 2, 3]);
obj.foo.call(otherObj, 1, 2, 3);
obj.foo.apply(otherObj, [1, 2, 3]);

// 引数リストが可変長です。
// これらのケースは `prefer-spread` ルールで警告されます
foo.apply(undefined, args);
foo.apply(null, args);
obj.foo.apply(obj, args);

使用方法

設定ファイルまたは CLI でこのルールを 有効化 するには、以下のいずれかを使用できます:

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

参照