0
JS를 배웠고 설명 할 수 없거나 웹에서 대답을 찾지 못했습니다.JS. 기능의 다른 장소에서 setTimeout을 사용하면 다른 결과가 발생합니다.
두 개의 유사한 기능이 다음과 같습니다 COUNT2은 약 8000 밀리 취하면서 COUNT1 기능, arount 5000 밀리 소요 크롬에서
function count1(){
if (i<(1e9+1)-1e6){
setTimeout(count1,0)
}
do{
i++
} while(i%1e6!=0)
if (i==1e9){
console.log('Done1 in '+(Date.now()-start)+'ms')
}
}
function count2(){
do{
i++
} while(i%1e6!=0)
if (i==1e9){
console.log('Done2 in '+(Date.now()-start)+'ms')
}
if (i<(1e9+1)-1e6){
setTimeout(count2,0)
}
}
let start=Date.now();
let i=0;
// count1();
count2();
//why count2 is faster?
</script>
. 유일한 차이점은 "setTimeout"코드가 다른 위치에 있다는 것입니다. 코드의 차이가 너무 커서 시간이 많이 걸리는 이유를 이해하는 데 도움을 주시기 바랍니다.
미리 감사드립니다.
예, 두 경우 모두 setTimeout (count1,0)에서 시작된 코드는 나머지 코드 (루프)가 끝난 후에 실행됩니다. (어떻게 올바르게 setTimeout (.., 0) 메서드가 작동하는지 이해한다면) – Dophin
아니요. setTimeout의 타이머는 호출하는 function-call의 끝이 아니라'setTimeout' 함수가 호출 될 때 즉시 시작됩니다. – AhmadWabbi
doc : https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/setTimeout "값 0을 사용합니다. 즉, 가능한 한 빨리"즉시 "실행합니다. ". 현재 상황에서 "최대한 빨리"는 루프가 완료된 직후 (병렬이 아님)를 의미합니다. 내가 잘못? – Dophin