데브허브 | DEVHUB | Classic JavaScript gotcha: why does this print 3, 3, 3 instead of 0, 1, 2?Classic JavaScript gotcha: why does this print 3, 3, 3 instead of 0, 1, 2?
- JavaScript의 고전적인 'Gotcha' 문제로,
for 루프 내 setTimeout에서 var를 사용할 때 예상과 다른 결과(0, 1, 2 대신 3, 3, 3 출력)가 발생합니다. 🐛
- 이는
for 루프가 setTimeout 콜백이 실행되기 전에 이미 완료되어, var로 선언된 변수 i가 최종 값인 3을 가지게 되기 때문입니다. ⏳
var는 함수 스코프를 가지므로, 모든 setTimeout 콜백이 동일한 i 변수를 참조하게 됩니다. 🔍
- 이 문제를 해결하려면
var 대신 블록 스코프를 가지는 let을 사용해야 합니다. let은 각 루프 반복마다 새로운 i 값을 생성하여 올바른 값을 캡처합니다. ✅