setTimeout은 핵심 JavaScript의 일부가 아닙니다. 네, 당신이 들은 게 맞습니다. 브라우저(웹 환경)에서 제공하는 웹 API 또는 서버 측 환경의 Node.js API의 일부입니다.
우리 모두 알고 있듯이 setTimeout 메소드는 CB 함수를 매개변수로 사용합니다. 다른 매개변수는 CB가 실행되어야 하는 시간(ms)입니다.
하지만 잠깐만요. setTimeout이 항상 주어진 시간 매개변수에 실행될 필요는 없습니다. 호출 스택이나 메인 스레드가 코드에 의해 차단되면 차단 코드가 완료된 후 호출 스택에서 setTimeout이 즉시 실행됩니다. 그때까지는 브라우저 콜백 대기열이나 작업 대기열에 계속 저장되어 있습니다.
console.log("HELLO"); setTimeout(() => console.log("Timeout executed"), 5000); //should be execute after 5sec let start = new Date().getTime(); let end= start; while (end < start + 10000){ end= new Date.getTime(); } //This loop will block the main thread for 10sec console.log("Time Expire"); //output--- //HELLO //Time Expire //Timeout executed (Immediately just after Time expire)
setTimeout에 0ms 시간을 제공하면 어떻게 될까요? 일반적인 코드 실행처럼 순차적으로 실행되나요.
대답은 '아니오'입니다. 호출 스택에서 즉시 먼저 실행되는 다른 함수와 달리 setTimeout은 먼저 CB 대기열로 이동하기 때문입니다.
위 내용은 setTimeout()은 매개변수에 지정된 시간보다 더 많은 시간이 걸립니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!