위의 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
'개발면접 > 자바스크립트 문제' 카테고리의 다른 글
Q3. this키워드 화살표함수와 일반함수의 차이 (0) | 2022.12.18 |
---|---|
Q1. 호이스팅 문제 (0) | 2022.11.27 |