본문 바로가기

개발면접/자바스크립트 문제

Q2. var와 let의 차이 (아직 완벽히 이해 못한듯?)

 

위의 for문과 아래의 for문 각각 무엇이 출력 될까요?

for (var i = 0; i < 3; i++) {
  setTimeout(() => console.log(i), 1)
}
 
for (let i = 0; i < 3; i++) {
  setTimeout(() => console.log(i), 1)
}

 

 

아래를 열면, 정답이 보인다.

더보기

어려운데?

그니까 var는 함수스코프이기때문에, for문의 스코프에 영향을 받지 않아서 같은 i를 참조한다?

근데 왜 i 는 3보다 작은데, var일때는 콘솔에 3이 찍힐까?

=> for문을 돌면, i가 3까지 찍힌뒤에 컴퓨터가  i < 3 이라는 조건문을 실행하여 for문을 빠져나오기 때문?

 

 

근데 let은 블록스코프라서 중괄호단위로 변수를 참조함. 따라서 for문을 돌릴때마다, 새로운 i를 가진 스코프가 계속해서 생겨난다. 근데 아예 다른 i스코프가 생겨나는데 왜 i가 1씩 증가할수있을까??

그 이유는 for문에서만 예외적으로 i를 참조한다고함??

 

그니까 결국 클로저와 스코프 문제인거 같은데, 아직 뭔가 속시원하게 해결되지가 않네.

 

 

나 왜 이거 잘 이해안되지?

 

 

 


 

참고하면 좋을 자료

https://www.youtube.com/watch?v=RZ3gXcI1MZY