간헐적인 통화
JavaScript에서는 간헐적인 호출이 매우 일반적입니다. setInterval은 특정 간격으로 반복적으로 호출됩니다.
setInterval() 메서드는 두 개의 매개변수를 받습니다. 첫 번째 매개변수는 문자열 또는 함수일 수 있고, 두 번째 매개변수는 반복 간격의 길이를 나타내는 밀리초 단위의 숫자입니다.
매개변수가 문자열입니다
첫 번째 전달된 매개변수가 문자열인 경우 다음과 같습니다.
setInterval("alert('this is a string.')",1000);
여기의 문자열은 JavaScript 코드 조각으로 전달된 eval() 함수의 매개변수와 동일합니다. 안팎에 따옴표가 두 개 있는 경우 따옴표가 동일하면 안 된다는 점을 기억하세요.
setInterval()은 숫자 ID를 반환합니다. 이 ID는 계획된 실행 코드의 고유 식별자이므로 반복 작업을 취소하는 데 사용할 수 있습니다. SetInterval()은 작업을 취소하는 메서드인clearInterval()에 해당합니다. 물론, 반복되는 작업을 취소하려면 실행이 완료되기 전에 clearInterval()을 배치해야 합니다.
예:
var intervalId=setInterval(...); clearInterval(intervalId);
먼저 ID를 가져온 다음 해당 ID를clearInterval()에 전달합니다. 취소 작업은 setInterval()을 따르기 때문에 발생하지 않은 것처럼 즉시 취소할 수 있습니다.
매개변수가 함수입니다
전달된 매개변수가 문자열인 경우 성능 저하가 발생할 수 있으므로 일반적인 상황에서는 여기에 함수를 전달하는 방법이 가장 일반적으로 사용됩니다.
은 다음과 같습니다.
var num=0; function increNum(){ num++; if(num>=10){ clearInterval(intervalId); alert('over'); } } intervalId=setInterval(increNum,500);
이 프로그램은 incrNum 함수를 설정하고 이를 setInterval()에 매개변수로 전달합니다. 동시에 10회 반복되면 실행 중인 작업이 취소되고 경고 상자가 나타납니다.
타임아웃 통화
타임아웃 호출은 간헐적인 호출인 setTimeout()과 유사하며 두 개의 매개변수도 받습니다. 첫 번째 매개변수는 JavaScript 코드가 포함된 문자열이거나 함수일 수 있으며, 두 번째 매개변수는 지연 시간과 setInterval()입니다. 메소드의 매개변수는 동일합니다.
하지만 주의할 점이 있습니다.
지연 시간은 설정된 지연 시간 이후에 프로그램이 반드시 실행된다는 의미는 아닙니다.
왜요?
자바스크립트는 단일 스레드 인터프리터이기 때문에 일정 시간 내에 하나의 코드만 실행할 수 있고 동시에 여러 코드를 실행할 수 없습니다. 따라서 자바스크립트에는 작업 대기열이 있으며, 실행될 작업은 순서대로 대기열에 정렬됩니다. 설정된 지연 시간은 현재 작업이 작업 대기열에 추가되는 시간입니다. 현재 실행 중인 작업이 없으면 작업 큐에 추가된 코드가 즉시 실행되고, 현재 실행 중인 코드 세그먼트가 있으면 새로 추가된 작업은 코드 세그먼트가 실행된 후에만 실행됩니다.
마찬가지로 setTimeout()에도 반환 ID가 있으며 이 숫자 ID를 사용하여 타임아웃 호출을 취소할 수도 있습니다. 해당 취소 방법은clearTimeout()입니다.
여기에서는 간헐적 호출에서 반복적으로 실행되는 코드를 복사하기 위해 timeout 호출 메소드를 사용합니다.
var num=0; function increNum(){ num++; if(num<=10){ setTimeout(increNum,500); }else{ alert('over'); } } setTimeout(increNum,500);
이 프로그램은 반복 작업을 완료하고 10회 후에 작업을 종료할 수도 있습니다. 위의 setInterval()과 차이점은 반환된 숫자 ID를 사용하지 않는다는 것입니다.
setInterval()이 반복적으로 실행되기 때문에 항상 숫자 ID가 반환되므로 이 숫자 ID를 항상 추적해야 하며 setTimeout()이 실행된 후에는 더 이상 실행되지 않으므로 필요하지 않습니다. 반환된 숫자 ID를 추적하는 것은 우리에게 어떤 편리함을 가져다줍니다.
게다가 이전 간헐적 호출이 끝나기 전에 후자의 간헐적 호출이 호출될 수도 있습니다. 이러한 상황은 함수의 실행 시간이 간헐적 호출 시간보다 길어질 때 발생하므로 요약하면 setTimeout()을 사용하는 것이 더 좋습니다. 간헐적인 통화를 시뮬레이션하는 방법입니다.
물론 비교적 간단한 프로그램에서는 setInterval()을 사용하는데 큰 문제는 없습니다.