viewimage.php?id=3dafdf21f7d335ab67b1d1&no=24b0d769e1d32ca73ded8ffa11d028313550f9fb3f9dac8b24082381cb5e5a4692d2a470a97a2abedce60b1b27e6ecb2061798d286ce704a7b67addc8f2eae8194d712524aab

나진짜어떻게든 혼자이해해보려다가 안되서 올려봄



지금 보면


전역실행컨텍스트에서 countSeconds() 함수가 실행되어서


새로운 실행컨텍스트가 생성되고


countSeconds 실행컨텍스트 안에서 setTimeout() 함수가 호출됬잖아.


그러면 setTimeout 실행컨텍스트가 생성되고


setTimeout 함수가 인자로 콘솔찍는 익명함수를 받았잖아.


그럼 setTimeout 함수에 루프마다 i = 1,2,3 을 받잖아.


그럼 3번의 내부함수(콘솔찍는거) 실행컨텍스트가 생성되는거임???


그리고 console.log(i)를 반환한상태에서


countSecond() 실행컨텍스트가 끝날때 환번에 반환되는거임?


근데 setTimeout 함수반환 값이 익명함수의 리턴값인데


지금 저 익명함수가 countSeconds의 내부함수가 아니라


setTimeout 함수의 내부함수인거임??


countSeconds 함수 실행이 다끝나고 나서 반환되니까


반환하는 시점의 i 참조값이 4가 되어버려서 4를 찍어내는거임??



countSecond 실행컨텍스트에서 실행이 끝나기 전에


setTimeout(f,1000)

setTimeout(f,2000)

setTimeout(f,3000)


이렇게 있다가


실행이끝났을때 countSeconds 실행이 끝나는 시점에는 i가 4여서 4가 찍혀서 반환되는거임..?



나 진짜 글쓰면서도 1시간 더 생각하다가 지금 1시간 30분쨰임 해결좀

울고싶다. 실행컨텍스트 부분도 계속 다시보고있는데


누가나좀도와줘


질문 글도 제대로한건지모르겠다.. 미안..