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

사용 방법

구성 파일 또는 명령줄에서 이 규칙을 활성화하려면 다음과 같이 사용할 수 있습니다:

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

참고 자료