Timeouts execute some code after a specified amount of time.

Intervals execute code repeatedly, waiting a specific amount of time in between each execution.

 

 

Timeout

 

Timeout 은 window 의 setTimeout() Method 로 설정한다.

첫번째 매개변수는 Code를 나타내는 문자열도 가능하고 Method 도 가능하다.

 

 

//avoid!
setTimeout(“alert(‘Hello world!’) “, 1000);


//preferred
setTimeout(function() {
    alert(“Hello world!”);
}, 1000);

 

 

첫번째 구문은 성능을 저하시키므로 피할 것.

 

 

setTimeout()을 호출하면 해당 타임아웃의 숫자형 ID 를 반환한다.

 

타임아웃 ID 는 코드의 고유식별자이며 타임아웃을 취소할때 사용한다.

 

//set the timeout
var timeoutId = setTimeout(function() {
    alert(“Hello world!”);
}, 1000);


//nevermind - cancel it
clearTimeout(timeoutId);

 

정해진 시간이 되기전에 clearTimeout()을 호출하기만 하면 타임아웃은 완전히 취소된다.

코드가 실행된 후에는 호출해도 아무 효과가 없다.

 

 

 

 

 

Interval

 

 

setInterval() 역시 IntervalID를 반환하며 후에 clearInterval()을 사용하여 Interval 을 취소할 때 사용한다.

 

Interval()은 취소하지 않으면 페이지가 떠 있는동안 계속 실행되므로 Interval 의 취소는 Timeout 의 취소보다 중요하다.

 

다음은 일반적인 사용예

 

 

var num = 0;
var max = 10;
var intervalId = null;


function incrementNumber() {
    num++;
    //if the max has been reached, cancel all pending executions
    if (num == max) {
        clearInterval(intervalId);
        alert(”Done”);
    }
}


intervalId = setInterval(incrementNumber, 500);

 

 

 

 

일반적으로 Interval()은 쓰지않는 편이 낫다.

 

var num = 0;
var max = 10;


function incrementNumber() {
    num++;
    //if the max has not been reached, set another timeout
    if (num < max) {
        setTimeout(incrementNumber, 500);
    } else {
        alert(“Done”);
    }
}


setTimeout(incrementNumber, 500);

 

 

이런 식으로 Timeout을 사용할 때는 다른 타임아웃이 필요할 때만 설정되므로 취소를 위해 timeoutID 를 추적할 필요가 없다. 사실 이 패턴은 Interval 없이 Interval 을 설정하는 모범사례.

Interval 사이의 시간을 정확히 보장하기 어렵고 이따금 일부 Interval을 건너뛰기도 하므로 실무에서는 Interval 을 잘 쓰지 않는다. 위 예제 처럼 Timeout 을 설정하면 그런 일은 발생하지 않는다.

 

 

-- 도서 "JavaScript for Web Developers" 를 정리

 

행복한 고수되십시요.

 

woojja ))*

\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

반응형

'Web > JavaScript' 카테고리의 다른 글

[JavaScript] WebPack  (0) 2017.10.09
[JavaScript] SystemJS  (0) 2017.10.08
[JavaScript] Markup Insertion  (0) 2017.02.10
[JavaScript] Pop Up 차단 확인  (0) 2017.01.26
[JavaScript] Browser 탐지 스크립트  (0) 2017.01.26

+ Recent posts