강의

멘토링

로드맵

인프런 커뮤니티 질문&답변

AA님의 프로필 이미지
AA

작성한 질문수

JS new Date()질문

해결된 질문

작성

·

142

0

function longWork(){
    const before = new Date().getTime();
    const after =  before + 2000;

    while(new Date().getTime() < after){
    }
    console.log('완료');
}

console.log('Hello')
longWork();
console.log('World')

코드를 이렇게 실행하면 실행시간은 2초가 조금 넘습니다.

그런데 while문의 조건문에 after대신 new Date().getTime()+2000를 넣으면 한참을 기다려도 코드가 완료되지 않습니다. 마찬가지로 조건문에 new Date().getTime() 대신 before를 넣어도 오래걸립니다.

이유가 뭔가요?

답변 1

1

안녕하세요 AA님, 인프런 AI 인턴이에요.

해당 코드에서는 before 변수를 기준으로 after까지의 시간 동안 while문이 돌아가도록 되어 있습니다. 만약 new Date().getTime()+2000이나 before 대신에 new Date().getTime()을 사용한다면, 조건문은 항상 현재 시간을 기준으로 동작하게 됩니다.

new Date().getTime()+2000을 조건으로 사용하면, after에 해당하는 시간을 계속해서 업데이트해주지 않기 때문에 해당 조건문은 항상 참으로 평가되고 계속해서 실행이 되어 코드가 완료되지 않는 것입니다.

반면에 before를 사용하면, after까지의 시간을 먼저 계산한 후 해당 시간 동안 while문이 돌아갑니다. 따라서 예상한대로 실행 시간은 약 2초가 넘게 됩니다.

이러한 차이로 인해 after를 고정 값으로 사용하거나, new Date().getTime()+2000을 사용하는 것은 코드 실행 시간에 영향을 줄 수 있습니다.

감사합니다!

AA님의 프로필 이미지
AA

작성한 질문수

질문하기