jQuery와 비슷한 JavaScript 메소드가 있습니까 ( delay()
또는 wait()
특정 시간 동안 스크립트 실행을 지연시키기 위해)?
답변
답변
다른 사람들이 말한 것에 덧붙여서 setTimeout
: 나중에 매개 변수가있는 함수를 호출하려면 익명의 함수 호출을 설정해야합니다.
나중에 호출하려면 함수를 인수로 전달해야합니다. 사실상 이것은 이름 뒤에 괄호가없는 것을 의미합니다. 다음은 한 번에 경고를 호출하고 ‘Hello world’를 표시합니다.
var a = "world";
setTimeout(alert("Hello " + a), 2000);
이 문제를 해결하려면 Flubba처럼 함수 이름을 입력하거나 익명 함수를 사용할 수 있습니다. 매개 변수를 전달해야하는 경우 익명 함수를 사용해야합니다.
var a = "world";
setTimeout(function(){alert("Hello " + a)}, 2000);
a = "Stack Overflow";
그러나 해당 코드를 실행하면 2 초 후에 팝업에 ‘Hello Stack Overflow’가 표시됩니다. 변수 a의 값이 2 초 동안 변경 되었기 때문입니다. 2 초 후에 ‘Hello world’라고 말하려면 다음 코드 스 니펫을 사용해야합니다.
function callback(a){
return function(){
alert("Hello " + a);
}
}
var a = "world";
setTimeout(callback(a), 2000);
a = "Stack Overflow";
2 초간 기다린 후 ‘Hello world’가 팝업됩니다.
답변
조금만 확장하면 … setTimeout
호출 에서 직접 코드를 실행할 수 있지만 @patrick가 말한 것처럼 일반적으로 이와 같은 콜백 함수를 할당합니다. 시간은 밀리 초입니다
setTimeout(func, 4000);
function func() {
alert('Do stuff here');
}
답변
정말로 (동기화) 블로킹 (동기식) delay
기능을 원한다면 다음과 같이하십시오.
<script type="text/javascript">
function delay(ms) {
var cur_d = new Date();
var cur_ticks = cur_d.getTime();
var ms_passed = 0;
while(ms_passed < ms) {
var d = new Date(); // Possible memory leak?
var ticks = d.getTime();
ms_passed = ticks - cur_ticks;
// d = null; // Prevent memory leak?
}
}
alert("2 sec delay")
delay(2000);
alert("done ... 500 ms delay")
delay(500);
alert("done");
</script>
답변
setTimeout 을 사용 하고 콜백 함수를 전달해야합니다. 자바 스크립트에서 절전 모드를 사용할 수없는 이유는 전체 페이지가 그 동안 아무것도하지 못하도록 차단했기 때문입니다. 좋은 계획이 아닙니다. Javascript의 이벤트 모델을 사용하고 행복을 유지하십시오. 싸우지 마!
답변
window.setInterval () 을 사용 하여 일정한 간격으로 일부 코드를 반복적으로 실행할 수도 있습니다 .
답변
이전 의견을 추가하기 위해 다음과 같이 말하고 싶습니다.
setTimeout()
JavaScript 의 함수는 스크립트 자체의 실행을 일시 중지하지 않고 단지 나중에 컴파일러에게 코드를 실행하도록 지시합니다.
JavaScript에 내장 된 실행을 실제로 일시 정지 할 수있는 기능은 없습니다. 그러나 함수를 사용하고 Date()
필요한 시간 간격을 추가 하여 시간에 도달 할 때까지 무조건 루프와 같은 기능을 수행하는 고유 한 함수를 작성할 수 있습니다 .