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