• 카테고리

    질문 & 답변
  • 세부 분야

    프론트엔드

  • 해결 여부

    해결됨

javascript 내장함수 리뷰 파트 질문

23.06.22 22:45 작성 23.06.22 22:45 수정 조회수 166

0

let isStarted = false;

let auth = () => {

    if(isStarted === false){
        // 타이머가 작동중이 아닐때 타이머가 동작하게 함
        isStarted = true  
        document.getElementById("finish").disabled = false
        const token = String(Math.floor(Math.random() * 1000000)).padStart(6,"0")
        document.getElementById("target").innerText = token
        document.getElementById("target").style.color= "#" + token
    
        let time = 180
        let timer
        
        timer = setInterval(function() {
    
            if(time >= 0 ){
                let min = Math.floor( time / 60 )
                let sec = String (time % 60).padStart(2,"0")
                // console.log(min + ":" + sec)
                document.getElementById("timer").innerText= min + ":" + sec
                time = time - 1
            } else {
                document.getElementById("finish").disabled=true
                isStarted = false
                clearInterval(timer)
            }
    
        },1000)


        
    } else {
        // 타이머가 작동중일때
    }
}

 

let isStarted를 False로 주고

auth함수 안에 if문에서 isStarted가 False 일때

1.isStarted에 아무것도 할당 안하면 else문으로 넘어가지않는다.
2.처음에 isStarted에 true를 할당하고 마지막에 false를 할당한다

if문 부분에 설명이

모든게 낯선 제 머리로는 이 로직이 이해가 안되네요 ㅠㅠ
왜 true를 줬는지 ture를 주면 어떤일이 일어나는지
아무것도 안줬을때는 어떤일이 일어나는지 조금 더 자세한 설명 부탁드립니닷.
확실히 javascript파트는 어렵습니다.ㅠㅠㅠ

답변 1

답변을 작성해보세요.

1

안녕하세요! 현욱님!

if문은 else문과 짝꿍이에요!

if() 에서 괄호 안의 내용이 참이면 바로 다음에 오는 중괄호{ } 가 실행됩니다.

반대로, 거짓이면? else { } 이 부분이 실행되는거예요!

따라서 맨 처음에 isStarted 라는 변수에 false를 넣어 놓았으니, auth() 라는 함수가 실행됐을때 if(isStarted===false) 는 참이겠죠?! 따라서 바로 다음에 오는 중괄호 { } 부분이 실행되고 else{ } 는 실행되지 않았던 거예요!

다음으로 바로 아랫줄에서 isStarted에 true를 넣은 이유는, 이제 막 타이머를 실행시켰기 때문에 이 타이머가 끝나기 전까지는 더이상 또 다른 새 타이머를 안킬려고 그런거예요!

그래서 isStarted에 true를 넣었고, 그러니 다음에 auth() 라는 똑같은 함수가 다시 실행되더라도 if() 문은 이번엔 거짓이니까 새 타이머는 켜지지 않겠죠?!

여기까지 이해가 되셨다면 마지막에 왜 isStarted에 false를 넣었는지 한 번 스스로 고민해서 풀어보세요! 할 수 있어요!

전현욱님의 프로필

전현욱

질문자

2023.06.26

와우 제 질문을 완벽히 이해하셨군요. 감사합니다