-
[2019.04.18] Recursion 함수 작성 시 주의할 점!핵인싸 개발자의 길/코드스테이츠 Immersive Course 2019. 4. 18. 10:53
오늘 아침 toy문제를 풀다가 멘붕에 빠지게 한 코드가 있었다.
# 문제의 코드 내용 (실제 toy문제의 코드가 아닌 예시임)
첫번째 코드
function test(count){ if(count > 5) return; console.log(count); test(count++); } test(0);
두번째 코드
function test(count){ if(count > 5) return; console.log(count); test(count + 1); } test(0);
위 두 코드는 test라는 함수에 count를 1씩 증가시키면서 recursion호출을 하다가, count가 5 이상이 되면 recursion을 끝내는 함수이다.
보다시피 두 코드의 차이는, 단지 함수 내 에서 test를 호출을 할 때 인자를 1 증가시키는 작성법이 다를 뿐이다.
겉으로 보기에는 기능 상 전혀 차이가 없어 보인다.
과연 두 코드의 차이가 없을까?
둘 다 한번 돌려보면.... 첫번째 코드는 절망을 맞보게 될 것이다. 첫번째 코드는 무한루프를 돌게 된다.
분명히 test함수의 인자로 count를 1 증가시키도록 했는데, 왜 무한루프를 돌게 되는 것일까?
#문제의 코드
function test(count){ if(count > 5) return; console.log(count); test(count++); } test(0);
변수 뒤에 ++으로 작성하면, 해당 변수는 해야될 일을 한 뒤에 값이 1 증가된다.
그러니, test함수 인자에 0을 넣은 뒤 count가 1이 증가되는 것이다.
그러므로 test함수를 호출하기 전 스코프의 count는 1이 되었다. 그러나 호출당한 test함수 스코프의 count는 그대로 0인 것이다...
주의해야겠다....
반응형'핵인싸 개발자의 길 > 코드스테이츠 Immersive Course' 카테고리의 다른 글
[2019.04.26] Server-side-technics 스프린트 마무리.. (0) 2019.04.26 [2019.04.20] 이머시브 3주차를 마무리 하며. (0) 2019.04.21 [2019.04.18] Recase.ly 스프린트를 진행하며 (0) 2019.04.18 [2019.04.12] 이머시브 ChatterBox 스프린트 시작 (0) 2019.04.13 [2019.04.11] N-queens 스프린트를 진행하며.. (0) 2019.04.12