자바스크립트 var, let, const 대해서 공부하는 중
https://github.com/yalcodic/code-examples/blob/master/26_SCOPE/README.md
에서 설명하는 부분이 이해가 안됩니다.
function countWithLet () {
for (let i = 0; i < 5; i++) {
//'1초 뒤 i를 출력하라'는 지시를 내린다.
setTimeout(function () {
//i를 출력
console.log(i)
}, 1000)
}
}
countWithLet(); //위의 함수를 호출
결과는 아래처럼 나옵니다.
0
1
2
3
4
저 코드에서 제가 질문하고 싶은 내용은,
질문 1)
setTimeout() 함수에서 '1초 간격'으로 0, 1, 2...로 출력되는게 아니고,
setTimeout() 함수 호출 뒤 1초 후에 출력되는 거라고 하는데 정확히 이해가 안됩니다.
질문 2) scope라는 개념에 대해서,
위 countWithLet 함수 내 for문 내 setTimeout() 함수를 제거 후 지역변수 i의 타입을 var로 바꾸고 출력하면
0
1
2
3
4
라는 결과가 나옵니다.
이 때 var타입 i변수의 scope가 countWithLet 함수 내 전체 범위로 설정될텐데 왜 5, 5, 5, ...로 출력이 안되는건지 혼란이 오고 있습니다..
아직 scope의 개념에 대해 이해하지 못한 초보 개발자로서 조잡한 질문드린 점 양해바랍니다.