unicorn/consistent-function-scoping 의심스러움
작동 방식
외부 스코프에서 변수를 캡처하지 않는 스코프 내에 선언된 함수를 허용하지 않습니다.
왜 문제가 되는가?
함수 선언을 가능한 최상위 스코프로 이동하면 가독성이 향상되고, 직접적으로 성능 향상을 가져오며, 자바스크립트 엔진이 성능을 더 잘 최적화할 수 있도록 해줍니다.
예시
이 규칙에 부적절한 코드 예시:
js
export function doFoo(foo) {
// 외부 스코프의 변수를 캡처하지 않음 → 최상위 스코프로 이동 가능
function doBar(bar) {
return bar === "bar";
}
return doBar;
}
function doFoo(foo) {
const doBar = (bar) => {
return bar === "bar";
};
}이 규칙에 적절한 코드 예시:
js
function doBar(bar) {
return bar === "bar";
}
export function doFoo(foo) {
return doBar;
}
export function doFoo(foo) {
function doBar(bar) {
return bar === "bar" && foo.doBar(bar);
}
return doBar;
}제한 사항
이 규칙은 함수 내부의 불필요한 코드 블록을 탐지하거나 제거하지 않습니다:
js
function doFoo(foo) {
{
function doBar(bar) {
return bar;
}
}
return foo;
}또한 JSXElement 참조를 포함하는 함수는 무시합니다:
jsx
function doFoo(FooComponent) {
function Bar() {
return <FooComponent />;
}
return Bar;
}즉시 실행 함수 표현식 (IIFE)은 무시됩니다:
js
(function () {
function doFoo(bar) {
return bar;
}
})();구성
이 규칙은 다음 속성을 가진 구성 객체를 수용합니다:
checkArrowFunctions
type: boolean
기본값: true
화살표 함수와 함께 스코핑을 확인할지 여부.
사용 방법
이 규칙을 설정 파일 또는 명령줄 인터페이스에서 활성화하려면 다음을 사용할 수 있습니다:
json
{
"rules": {
"unicorn/consistent-function-scoping": "error"
}
}bash
oxlint --deny unicorn/consistent-function-scoping