찾다

 >  Q&A  >  본문

javascript - setTimeout의 지연 시간은 언제부터 시작됩니까?

setTimeout(fn,200), 여기서 지정한 시간은 프로그램이 실행되기 시작하자마자 계산된다는 뜻인가요? 아니면 메인 스레드의 작업이 완료될 때까지 기다렸다가 계산을 시작하기 전에 비동기 작업 목록을 다시 호출해야 합니까?

女神的闺蜜爱上我女神的闺蜜爱上我2701일 전1272

모든 응답(3)나는 대답할 것이다

  • 世界只因有你

    世界只因有你2017-07-05 11:05:30

    설명하기가 좀 복잡합니다
    우선 Javascript가 단일 스레드라는 점을 이해해야 합니다. 단일 스레드는 모든 작업을 대기열에 넣어야 함을 의미합니다. 그런 다음 모든 작업은 동기 작업과 비동기 작업이라는 두 가지 범주로 나뉩니다! 동기 작업: 메인 스레드에서 실행되는 작업의 경우 이전 작업이 완료된 후에만 다음 작업이 실행됩니다! 비동기 작업: 메인 스레드에 들어가지 않고 "작업 큐"에 들어가는 작업입니다. 메인 스레드의 작업이 완료되면 메인 스레드가 "작업 큐"를 실행합니다.

    실제 실행 시간이 반드시 200ms 이후인 것은 아니며 더 긴 시간 이후일 수도 있습니다(메인 스레드의 동기화 코드 실행 시간에 따라 다름). setTimeout(fn,200),当到200ms时,fn会被放进“任务队列”,而“任务队列”必须要等到主线程已有的代码执行完才会执行fn,所以当程序执行到setTimeout(fn,200)这一行时,时间就开始计算,但是fn

    회신하다
    0
  • 欧阳克

    欧阳克2017-07-05 11:05:30

    간단히 말하면setTimeout(fn,200)需要等到当前函数调用栈(主进程上的同步任务)清空之后才开始执行,会在下一轮事件循环(主线程从"任务队列"中读取事件)开始时执行,setTimeout이벤트만 "작업 대기열"에 삽입됩니다. 여기서 설정한 시간은 이벤트 루프의 다음 라운드가 시작되는 시간을 기준으로 한 간격입니다.

    회신하다
    0
  • 巴扎黑

    巴扎黑2017-07-05 11:05:30

    시간은 setTimeout(fn,200)이 호출되면 시작됩니다.

    회신하다
    0
  • 취소회신하다