setTimeout()의 신뢰 문제! 💔 setTimeout 인터뷰 질문

setTimeout에 신뢰 문제가 있습니다! 💔




setTimeout(function a() {
   console.log("Example");
}, 5000);


위의 프로그램을 실행하면 함수 a의 결과를 기록하는 데 5초 또는 5초 이상 걸릴 수 있습니다. 예, 모두 호출 스택에 의존하기 때문에 올바르게 읽었습니다.

위의 진술을 증명하기 위해 우리는 한 가지 예를 볼 것입니다:
예 1:

console.log("Start");

setTimeout(function a() {
   console.log("Callback");
}, 5000);

console.log("End");

let startDate = new Date().getTime();
let endDate = startDate;

// Added 10 sec timer
while (endDate < startDate + 10000) {
   endDate = new Date().getTime();
}

console.log("While expires");


위 프로그램의 출력이 무엇인지 추측하십시오. 콘솔에서 먼저 Start가 인쇄되고 End가 인쇄된다고 생각할 수 있습니다. 어느 것이 절대적으로 옳습니다! 그 후에는 setTimeout 함수 a가 5초 후에 실행될 것이라고 생각할 수 있지만 대답은 NO입니다. 처음에는 GEC(글로벌 실행 컨텍스트)가 생성되고 GEC 코드를 실행하는 데 10초가 걸리고 setTimeout이 콜백 큐에 등록되고 이벤트 루프가 콜스택이 비어 있을 때만 setTimeout 함수를 호출하므로 콜스택에 추가되기 때문에 10초 후에 실행됩니다. 이것이 전체 동시성 모델이 작동하는 방식입니다.

산출:

Start
End
While expires
Callback


개념을 이해하기 위해 한 가지 더 예를 들어 보겠습니다.
예 2:

console.log("Start");

setTimeout(function a() {
   console.log("Callback");
}, 0);

console.log("End");


이제 프로그램의 출력이 무엇인지 추측하십시오. 위의 예에서 setTimeout이 콜백 대기열에 있고 콘솔의 Start 및 End 인쇄 이후에 호출 스택이 비워진 후에만 호출되는 것을 볼 수 있습니다.

산출:

Start
End
Callback


누가 setTimeout에 0초를 쓰는지 생각해야 합니다. 그러나 모든 함수가 실행된 후 특정 코드를 실행하려는 경우와 같이 특정 조건에서 setTimeout에 0초를 쓸 수 있습니다. 이러한 조건에서 setTimeout에서 0초를 사용할 수 있습니다.

Akshay Saini의 Namaste javascript 시리즈를 보기 전까지는 이 사실을 몰랐습니다. 저를 믿으십시오. 많은 시니어 개발자들이 위의 예의 결과에 올바르게 대답하지 못할 것입니다.

그래서, 이것은 내 첫 번째 게시물입니다. 이 개념에 정말 놀랐다면 댓글 섹션에서 알려주십시오.

좋은 웹페이지 즐겨찾기