주의점을 알아보기 전에
기존에 알고 있던 재귀 함수와 증감 연산자에 대해 아주 간단히 알아보고 가보자
1) 재귀 함수
함수가 자기 자신을 호출하는 것을 재귀 호출이라 한다.
이 재귀 호출을 수행하는 함수가 바로 재귀 함수이다.
재귀 함수는 아래와 같이 반복 처리를 위해 사용한다.
반복하는 방법으로는 for문 while문등 여러 가지가 있으니 시의적절하게 사용해야 한다. 무조건 재귀 함수가 좋은 건 아니다.
function countdown(n) {
if(n<0) return;
console.log(n);
countdown(n - 1);
}
countdown(10);
2) 증감 연산자
증감 연산자는 피연산자를 1씩 증가 혹은 감소시킬 때 사용하는 연산자입니다.
이 연산자는 피연산자가 단 하나뿐인 단항 연산자입니다.
증감 연산자 | 설명 |
++x | 피연산자의 값을 1 증가시킨 후에 해당 연산을 진행함. |
x++ | 먼저 해당 연산을 수행하고 나서, 피연산자의 값을 1 증가시킴. |
--x | 먼저 피연산자의 값을 1 감소시킨 후에 해당 연산을 진행함. |
x-- | 먼저 해당 연산을 수행하고 나서, 피연산자의 값을 1 감소시킴. |
예로 쉽게 이해해보자
// 앞쪽에 증감연산자가 위치할 때
let count = 2;
const number = ++count;
//이걸 풀어쓰면 아래와 같다.
let count = 2;
count = count + 1;
const number = count
// 뒤쪽에 증감연산자가 위치할때
let count = 2;
const number = count++;
//이걸 풀어쓰면 아래와 같다.
let count = 2;
const number = count
count = count + 1;
증감 연산자를 여러 개 사용할 때
let x = 10;
let y = x-- +5 + --x;
// x = 8, y = 23;
3) 재귀 함수와 증감 연산자를 같이 사용할 때 주의할 점
자 이제 개념들을 간단하게 익혔으니 다시 본론으로 돌아와 보자
아래와 같을 때 과연 count는 어떻게 될까?
function coco(num, count = 0){
return num === 3 ? count : coco(num += 1,count++)
}
console.log(coco(0))
정답은 count = 0이다
이렇게 return에다가 증감 연산자를 사용할 때 후면에 위치시키면 작동하지 않는다.
정확히 맞는지는 모르겠지만 count = count 할당하고 + 1을 하는데 +1 하기 전에 return이 되어버려서 그런 것 같다.
아래와 같이 말이다.
function coco(num, count = 0){
return num === 3 ? count : coco(num += 1,count = count)
count = count + 1
}
console.log(coco(0))
이렇게 작동하는 것 같다. 그래서 count가 +1 이 재귀 함수가 끝날 때까지 되지 않는다.
따라서 return에서 증감 연산자를 사용하고자 한다면 앞쪽에다 사용해야 한다.
function coco(num, count = 0){
return num === 3 ? count : coco(num += 1, ++count)
}
console.log(coco(0))
이렇게 하면 잘 작동한다.
대신 앞쪽에 위치하기에 +1을 해준 뒤 다시 count에 할당한다는 것을 꼭 염두에 두고 코드를 짜야한다.
참고
https://studymake.tistory.com/417
'Javascript > 개념' 카테고리의 다른 글
[JS] 배열을 복사하는 여러가지 방법 (1) | 2023.11.12 |
---|---|
[JS - 개념] 원시타입(Primitive Type)과 객체 타입(Object/Reference Type) (1) | 2023.11.12 |
[JS - 놓치기 쉬운 개념] parseInt() 개념 및 주의할 점들 (0) | 2023.09.05 |
[JS - 개념] Sort() <배열 고차함수> (0) | 2023.05.26 |
[JS - 개념] String.prototype.replace() (0) | 2023.01.31 |