less than 1 minute read

setTimeout/setInterval

내부 콜백 실행 시 클로져는 고정됨
  • 문제 발생

    
      const value = 10
    
      const timer = setTimeout(()=>{
          console.log(value)
      }, 5000)
    
    

    해당 코드는 5초 뒤에 console 에 10이 찍힘

    만약 5초가 되기 전에 value 값을 핸들링한다면 console 에는 바뀐 값이 나와야 함

    하지만 console 에는 10이 찍힘

  • 원인

    setTimeout 이나 setInterval 실행 시 내부 콜백 함수는 고정된 closure 를 가지게 됨

    따라서 참조하고 있는 변수가 변하더라도 호출 시점에 closure 는 고정되기 때문에 변수도 고정됨

Categories:

Updated: