settimeout, addeventlistener 같은 함수들은 web api라는 임시보관함을 거치는 특이한 함수들입니다
브라우저는 settimeout을 만나자마자
1. web api라는 공간에 settimeout내부의 콜백함수를 잠깐 보관하고
2. 그 콜백함수가 실행할때가 되면 실행하라고 내보내줍니다
그래서 위의 코드를 컴퓨터입장에서 해석해보면
- 반복문으로 내부 코드를 5번 복붙하기 시작합니다
- settimeout을 만났기 때문에 걔를 web api로 보냅니다. 이걸 x5번합니다.
- 반복문이 끝납니다. 여기서 var i는 이미 5가 되어있습니다.
- 1초가 흐릅니다. 1초가 지나면 web api 안에 보관되었던 settimeout 함수 내부 console.log(i) 가 동작합니다.
- console.log를 실행하려고 봤더니 근처에 i는 var i 밖에 없고 그건 5입니다. 그래서 5를 출력해줍니다.
- 2초가 흐르고 또 settimeout내부 코드를 실행해주는데 위와 같습니다
- 3초가 흐르고 .. 역시 위와 같습니다