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 시리즈를 보기 전까지는 이 사실을 몰랐습니다. 저를 믿으십시오. 많은 시니어 개발자들이 위의 예의 결과에 올바르게 대답하지 못할 것입니다.
그래서, 이것은 내 첫 번째 게시물입니다. 이 개념에 정말 놀랐다면 댓글 섹션에서 알려주십시오.
Reference
이 문제에 관하여(setTimeout()의 신뢰 문제! 💔 setTimeout 인터뷰 질문), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://dev.to/vinayaksavle/trust-issues-with-settimeout-settimeout-interview-question-32ba
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
setTimeout(function a() {
console.log("Example");
}, 5000);
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
While expires
Callback
console.log("Start");
setTimeout(function a() {
console.log("Callback");
}, 0);
console.log("End");
Start
End
Callback
Reference
이 문제에 관하여(setTimeout()의 신뢰 문제! 💔 setTimeout 인터뷰 질문), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/vinayaksavle/trust-issues-with-settimeout-settimeout-interview-question-32ba텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)