수색…
통사론
- timeoutID = setTimeout (function () {}, 밀리 초)
- intervalID = setInterval (function () {}, 밀리 초)
- timeoutID = setTimeout (function () {}, 밀리 초, 매개 변수, 매개 변수, ...)
- intervalID = setInterval (function () {}, 밀리 초, 매개 변수, 매개 변수, ...)
- clearTimeout (timeoutID)
- clearInterval (intervalID)
비고
지연을 지정하지 않으면 기본값은 0 밀리 초입니다. 그러나 실제 지연 은 이보다 길어질 것입니다 . 예를 들어, HTML5 스펙 은 4 밀리 초의 최소 지연을 지정합니다.
때에도 setTimeout
0의 지연 호출에 의해 호출되는 함수 setTimeout
비동기 적으로 실행된다.
DOM 조작과 같은 많은 조작은 조작을 작성하여 다음 코드 문장으로 이동 했더라도 반드시 완료되지는 않으므로 이들이 동 기적으로 실행될 것이라고 가정해서는 안됩니다.
setTimeout(someFunc, 0)
을 사용하면 현재 JavaScript 엔진의 호출 스택 끝에 someFunc
함수의 실행을 대기열에 포함하므로 해당 작업이 완료된 후에 함수가 호출됩니다.
함수 ( setTimeout(function(){some..code}, 1000)
대신에 JavaScript 코드 ( setTimeout("some..code", 1000)
)를 포함하는 문자열을 전달할 수 있습니다 . 코드가 문자열에 있으면 eval()
사용하여 나중에 구문 분석됩니다. 문자열 스타일 시간 초과는 성능, 명확성 및 보안상의 이유로 권장되지 않지만이 스타일을 사용하는 이전 코드를 볼 수 있습니다. 전달 함수는 Netscape Navigator 4.0 및 Internet Explorer 5.0부터 지원되었습니다.
간격
function waitFunc(){
console.log("This will be logged every 5 seconds");
}
window.setInterval(waitFunc,5000);
간격 제거
window.setInterval()
은 IntervalID
반환합니다. IntervalID
는 해당 간격의 계속 실행을 중지시키는 데 사용할 수 있습니다. 이렇게하려면 window.setInterval()
의 반환 값을 변수에 저장하고 해당 변수를 유일한 인수로 사용하여 clearInterval()
을 호출합니다.
function waitFunc(){
console.log("This will be logged every 5 seconds");
}
var interval = window.setInterval(waitFunc,5000);
window.setTimeout(function(){
clearInterval(interval);
},32000);
그러면 This will be logged every 5 seconds
마다 5 초마다 This will be logged every 5 seconds
되지만 32 초 후에 기록됩니다. 따라서 메시지를 6 번 기록합니다.
제한 시간 제거
window.setTimout()
은 TimeoutID
반환합니다. TimeoutID
는 해당 타임 아웃이 실행되는 것을 중지시키는 데 사용할 수 있습니다. 이렇게하려면 window.setTimeout()
의 반환 값을 변수에 저장하고 해당 변수를 유일한 인수로 사용하여 clearTimeout()
을 호출합니다.
function waitFunc(){
console.log("This will not be logged after 5 seconds");
}
function stopFunc(){
clearTimeout(timeout);
}
var timeout = window.setTimeout(waitFunc,5000);
window.setTimeout(stopFunc,3000);
3 초 후에 타이머가 중지되므로 메시지를 로깅하지 않습니다.
재귀 적 setTimeout
함수를 무한정 반복하려면 setTimeout
을 재귀 적으로 호출 할 수 있습니다.
function repeatingFunc() {
console.log("It's been 5 seconds. Execute the function again.");
setTimeout(repeatingFunc, 5000);
}
setTimeout(repeatingFunc, 5000);
setInterval
과 달리 함수의 실행 시간이 지정된 지연보다 setInterval
함수가 실행되도록합니다. 그러나 함수 실행 사이에 일정한 간격을 보장하지는 않습니다. 이 동작은 또한 setTimeout
대한 재귀 호출 전에 예외가 반복되지 않도록하기 때문에 예외입니다. setInterval
은 예외에 관계없이 무기한 반복됩니다.
setTimeout, 작업 순서, clearTimeout
setTimeout
- 지정된 밀리 초를 기다린 후 함수를 실행합니다.
- 함수의 실행을 지연시키는 데 사용됩니다.
구문 : setTimeout(function, milliseconds)
또는 window.setTimeout(function, milliseconds)
예 : 이 예제는 1 초 후에 콘솔에 "hello"를 출력합니다. 두 번째 매개 변수는 밀리 초 단위이므로 1000 = 1 초, 250 = 0.25 초 등입니다.
setTimeout(function() {
console.log('hello');
}, 1000);
setTimeout 문제
for 루프에서 setTimeout
메소드를 사용하는 경우 :
for (i = 0; i < 3; ++i) {
setTimeout(function(){
console.log(i);
}, 500);
}
값 3 three
번 출력합니다. 이는 올바르지 않습니다.
이 문제의 해결 방법 :
for (i = 0; i < 3; ++i) {
setTimeout(function(j){
console.log(i);
}(i), 1000);
}
값 0
, 1
, 2
출력합니다. 여기에서 i
를 매개 변수 ( j
)로 함수에 전달합니다.
운영 순서
또한 Javascript가 단일 스레드이며 전역 이벤트 루프를 사용하기 때문에 setTimeout
을 사용하여 0 지연으로 setTimeout
을 호출하여 실행 큐 끝에 항목을 추가 할 수 있습니다. 예 :
setTimeout(function() {
console.log('world');
}, 0);
console.log('hello');
실제로 출력됩니다 :
hello
world
또한 여기서 0 밀리 초는 setTimeout 내부의 함수가 즉시 실행된다는 것을 의미하지 않습니다. 실행 큐에 남아있는 항목을 실행하는 것보다 약간 더 많은 시간이 소요됩니다. 이 메시지는 대기열의 끝으로 전달됩니다.
시간 초과 취소
clearTimeout () : setTimeout()
지정된 함수의 실행을 중지합니다 .
구문 : clearTimeout (timeoutVariable) 또는 window.clearTimeout (timeoutVariable)
예 :
var timeout = setTimeout(function() {
console.log('hello');
}, 1000);
clearTimeout(timeout); // The timeout will no longer be executed
간격
표준
변수를 만들 필요는 없지만 clearInterval과 함께 변수를 사용하면 현재 실행중인 간격을 중지 할 수 있으므로 좋습니다.
var int = setInterval("doSomething()", 5000 ); /* 5 seconds */
var int = setInterval(doSomething, 5000 ); /* same thing, no quotes, no parens */
doSomething 함수에 매개 변수를 전달해야하는 경우 첫 번째 매개 변수를 넘어서 setInterval에 추가 매개 변수로 전달할 수 있습니다.
겹치지 않고
위와 같이 setInterval은 5 초 (또는 설정 한 시간)마다 실행됩니다. 함수 doSomething이 실행되는 데 5 초 이상 걸리는 경우에도 마찬가지입니다. 그것은 문제를 야기 할 수 있습니다. doSomething의 실행 사이에 일시 중지가 있는지 확인하려는 경우 다음을 수행 할 수 있습니다.
(function(){
doSomething();
setTimeout(arguments.callee, 5000);
})()