// for(var sim = 0; sim < 3; sim++){
// setTimeout(function(){
// console.log(sim)
// }, sim*1000)
// }

  • 결과는 3이 1초마다 출력
  • 실행 컨텍스트에서 setTimeout은 queue에 대기하여 있다가 for 문이 끝나면 그때 stack으로 이동하여 실행되는데 이때 변수를 for문이 끝난 시점의 변수인 3을 출력한다.

for(var i=0; i<5; i++){
function timer(j){
setTimeout(function(){
console.log(j)
}, j * 1000)
}
timer(i)
}
- 결과는 0 부터 4 까지 1초마다 출력 .

  • 함수와 함수를 관계시킨 클로저 사용
  • timer 가 실행되면 j 값과 함께 scope가 생성된다.
  • setTimeout은 j를 참조하게 된다.

for(let k = 0; k < 5; k++){
setTimeout(function(){
console.log(k)
}, k*1000)
}

  • let 을 사용해도 된다.