티스토리 뷰

 

오늘 학원에서 시험에 나온 문제 중 하나 입니다. 

function func(){
	let i, j = 0;
    
    for( i = 0; i <= 8; i++){
    	j += i;
    }
    document.write( j + i );
}
func();

문제의 내용입니다만,  저는 정답이 44라고 생각했는데 45가 정답이었습니다. 

for문 안에 들어오는 0부터 8까지 계속 더한 값을 j에 넣어주는것 까지는 이해가 됩니다. 

 

마지막 줄 document.write( j + i ); 에서  0부터 8까지 더한 값 36이 j로 들어가고  for문에서 나온 i가 8까지 진행되어서 i에는 8이 들어가므로 36 + 8 =44 입니다. 가 저의 풀이 였는데요. 

정답은 45였고

왜 끝나고 난 뒤 i값에 9가 들어가는지 이해가 어렵습니다. 

{
            let i = 0;
            for(i =0; i<=8; i++){
                i;
                console.log(i)
            }
            console.log(i);
        }

좀 더 간단하게 만들어서 개념만 보도록 합시다. 

콘솔로그에는 0부터 8까지가 들어가고 for문이 끝나고난 뒤 i값에는 9가 들어갑니다. 

왜냐하면 

 

for문이 시작되고 for( i<=8;) 조건을 먼저 인식한 후 조건에 맞는 i값을 도출한 후, i++이 실행됩니다. 

 그렇게 되면 맨위의 전역변수 i가 8이 되었을 때, 조건을 읽고 i=8 이라는 결과를 도출한 후 i++까지 실행됩니다. 

그러면 맨위에 전역변수 i 는 8에서 9로 변경됩니다.  전역변수 i가 9가 되고난 뒤 for문을 실행하러 가면 9는 조건에 맞지 않아서 출력되지 않고 for문은 종료됩니다. 

 

여기서 바깥에서 전역변수 i를 불러오면 for 문에 있는 i = 8 이 아니라 맨 위에있는 i=9가 불러와지게 됩니다. 

 

그래서 정답은 44가 아니라 45 입니다.  

 

댓글
© 2018 webstoryboy