저 경우 5로만 나오는게 당연하고
해결법은 익명함수로 감싸서 파라미터로 i 받으면 되는건데
또 다른 해결법으로 var이 아니라 let을 쓰는 것이 있다
근데 let으로 스코프가 변했다고 하더라도
setTimeout안의 저 익명함수가 실행되는 시점에서는 i가 5가 되는게 맞잖아?
근데 실제로는 정상적으로 출력된다
이 문제에 대해서 자스 문법적으로 깔끔하게 설명해줄 고수 있냐
저 경우 5로만 나오는게 당연하고
해결법은 익명함수로 감싸서 파라미터로 i 받으면 되는건데
또 다른 해결법으로 var이 아니라 let을 쓰는 것이 있다
근데 let으로 스코프가 변했다고 하더라도
setTimeout안의 저 익명함수가 실행되는 시점에서는 i가 5가 되는게 맞잖아?
근데 실제로는 정상적으로 출력된다
이 문제에 대해서 자스 문법적으로 깔끔하게 설명해줄 고수 있냐
저게 왜 5만 나와? i는 number형이니까 값복사 아닌가? 그러면 1,2,3,4,5나오는ㄱ ㅔ맞는 것같은데
let은 블록스코프라 for문 내에서 변수를 새로 만들어서 할당해서 쓰는거고 var은 함수스코프라 변수 하나를 계속 돌려쓰니까?
왜 i가 5지 4 아닌가?
var로 썼을땐 함수 스코프라 그런거 맞는듯. let으로 변수 선언하면 매 순간 생기는 블록의 i를 참조하니까