JavaScript는 단일 스레드에서 실행됩니다.
문제
<!DOCTYPE html>
<html>
<head>
<title>Document</title>
</head>
<body>
<script>
console.log(`Start ${new Date()}`)
// 3秒後にCallbackと表示
setTimeout(() => {
console.log(`Callback ${new Date()}`)
}, 3000)
// 10秒間かかる処理を実行する
const now = new Date()
let dummy = 0
while (new Date() - now < 10000) {
dummy++ // 適当な計算処理
}
console.log(`End ${new Date()}`)
</script>
</body>
</html>
이 HTML을 브라우저에서 표시하면 콘솔에
Start
, Callback
, End
가 어떤 순서로 표시됩니까?Start
가 표시됩니다 Callback
Callback
라고 표시된다 End
로 표시 따라서
Start
→ Callback
→ End
그렇게 생각하지 않습니까?
죄송합니다! 부정답입니다.
실행 결과
Start Tue May 21 2019 10:39:40 GMT+0900 (日本標準時)
End Tue May 21 2019 10:39:50 GMT+0900 (日本標準時)
Callback Tue May 21 2019 10:39:50 GMT+0900 (日本標準時)
실제로는
Start
→ End
→ Callback
의 순서로 실행됩니다.포인트
여기 근처가 포인트입니다.
setTimeout
는 지정된 시간 후에 함수 실행을 예약합니다.해설
즉, 정확하게는 다음과 같은 순서가 됩니다.
Start
가 표시됩니다 Callback
End
로 표시 Callback
라고 표시된다 따라서
Start
→ End
→ Callback
의 순서로 실행됩니다.덧붙여서,
setTimeout
를 사용하는 경우 이외에도,등의 경우도 싱글 스레드이므로 같은 처리 순서가 됩니다.
Reference
이 문제에 관하여(JavaScript는 단일 스레드에서 실행됩니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/KickJune/items/3e980d00102c5c7cf600텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)