我们知道alert()是阻塞式的,但是一下代码执行顺序有问题
执行顺序有问题
(()=>{ for(let i = 0; i < 5; i++){ setTimeout(() => alert(i), 1000); } })()
结果: 0,3,2,1,4
执行顺序没问题
(()=>{ for(let i = 0; i < 5; i++){ setTimeout(() => console.log(i), 1000); } })()
结果:0,1,2,3,4
这是为什么呢?
欢迎选择我的课程,让我们一起见证您的进步~~
setTimeout의 작동 원리를 살펴보는 것이 좋습니다
경고 0이 발생했을 때 확인을 클릭하지 않으면 5초 동안 기다린 후(스레드가 유휴 상태인 경우 10초 이상 기다려야 할 수도 있음) 다시 클릭하면 순서가 정상임을 알 수 있습니다
이유는 setTimeout의 코드가 프로세스가 점유되어 있으면 프로세스가 유휴 상태일 때 이번 시간을 건너뛰고 다음 번에 실행하기 때문입니다.
링크를 게시하세요. 읽고 나면 깨닫게 될 것입니다.
setTimeout의 작동 원리를 살펴보는 것이 좋습니다
경고 0이 발생했을 때 확인을 클릭하지 않으면 5초 동안 기다린 후(스레드가 유휴 상태인 경우 10초 이상 기다려야 할 수도 있음) 다시 클릭하면 순서가 정상임을 알 수 있습니다
이유는 setTimeout의 코드가 프로세스가 점유되어 있으면 프로세스가 유휴 상태일 때 이번 시간을 건너뛰고 다음 번에 실행하기 때문입니다.
링크를 게시하세요. 읽고 나면 깨닫게 될 것입니다.