관리 메뉴

프론트엔드 정복하기

ESLint 규칙 - 함수 매개변수 재할당 금지 본문

개발노트

ESLint 규칙 - 함수 매개변수 재할당 금지

GROWNFRESH 2021. 5. 27. 14:12

getFlexAlign함수에서 result 변수를 파라미터로 전달받고 특정 값을 재할당 해서 return 시키고자 했다.

function getFlexAlign(result: string, flexAlign: string) {
    result += flexAlign;
    return result;
}

...

let result = `
	flex-direction: ${direction};
`;

return getFlexAlign(
	result,
	`
		align-items: ${align[0]};
		justify-content: ${align[1]};
	`,
);

 

하지만 eslint error가 발생했는데 에러를 발생시킨 원인 아래와 같은 규칙 때문이다.

 

 

 


ESLint - 함수 매개 변수 재 할당 금지

https://runebook.dev/ko/docs/eslint/rules/no-param-reassign

 

함수 매개변수로 선언 된 변수에 대한 할당은 오해의 소지가 있으며

함수 매개 변수를 수정하면 arguments 객체도 변경되므로 혼란스러운 동작을 유발할 수 있다.

 

잘못된 코드의 예

function foo(bar) {
    bar = 13;
}

function foo(bar) {
    bar++;
}

function foo(bar) {
    for (bar in baz) {}
}

function foo(bar) {
    for (bar of baz) {}
}

 

올바른 코드의 예

function foo(bar) {
    var baz = bar;
}

 


 

 

 

따라서 매개변수를 새로운 변수에 복사하는 방식으로 수정했다.

// before
function getFlexAlign(result: string, flexAlign: string) {
    result += flexAlign;

    return css(result);
}


// after
function getFlexAlign(result: string, flexAlign: string) {
    let resultCopy = result;
    resultCopy += flexAlign;

    return css(resultCopy);
}

 

 

javascript문법 상 원시타입을 매개변수로 전달 받으면, 해당 인자(함수에서 정의된 값)는 다른 주소값으로 복사되기 때문에 새로운 변수에 복사해서 사용할 필요가 없다. (다만 객체 타입은 같은 주소값으로 복사되므로 새 변수에 복사해서 불변성을 지켜주는 것이 좋다.)

 

하지만 ESLint에서는 원시타입까지도 매개변수를 직접 쓰는 것을 지양하기 때문에 새로 복사해서 사용해야 한다는 것을  기억하자.

'개발노트' 카테고리의 다른 글

Set 객체  (0) 2021.07.08
zero fill style (00, 01, ...24) 형태로 나타내기  (0) 2021.07.08
배포 후 로그아웃이 안되는 문제  (0) 2020.09.15
배포 후 쿠키, 세션 문제  (0) 2020.09.15
배포 session 오류 해결  (0) 2020.08.28