setTimeout/setInterval 과 클로저
setTimeout/setInterval
내부 콜백 실행 시 클로져는 고정됨
-
문제 발생
const value = 10 const timer = setTimeout(()=>{ console.log(value) }, 5000)
해당 코드는 5초 뒤에 console 에 10이 찍힘
만약 5초가 되기 전에 value 값을 핸들링한다면 console 에는 바뀐 값이 나와야 함
하지만 console 에는 10이 찍힘
-
원인
setTimeout 이나 setInterval 실행 시 내부 콜백 함수는 고정된 closure 를 가지게 됨
따라서 참조하고 있는 변수가 변하더라도 호출 시점에 closure 는 고정되기 때문에 변수도 고정됨