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