JavaScript 타이머의 setTimeout 및 setInterval_javascript 기술 이해
1. 설명
1. 개요
setTimeout: 지정된 지연 시간 후에 함수를 호출하거나 코드 조각을 실행합니다
setInterval: 주기적으로 함수를 호출하거나 코드를 실행합니다.
2. 문법
setTimeout:
var timeoutID = window.setTimeout(func, delay, [param1, param2, ...]); var timeoutID = window.setTimeout(code, delay);
- timeoutID는 지연 작업의 숫자 ID입니다. 그러면 이 ID를 window.clearTimeout 메서드의 매개 변수로 사용할 수 있습니다.
- func는 밀리초 지연 후 실행하려는 함수입니다.
- code 두 번째 구문에서는 밀리초 지연 후 실행하려는 코드를 의미합니다.
- delay는 지연 시간(1초는 1000밀리초와 동일)입니다. 그러나 실제 지연 시간은 약간 더 길 수 있습니다. >
- 표준 브라우저와 IE10은 첫 번째 구문에서 지연된 함수에 추가 매개변수를 전달하는 기능을 지원합니다
설정 간격
var intervalID = window.setInterval(func, delay[, param1, param2, ...]); var intervalID = window.setInterval(code, delay);
- intervalID는 이 반복 작업의 고유 식별자이며clearInterval()에 매개 변수로 전달될 수 있습니다.
- func는 반복해서 호출하려는 함수입니다.
- code는 또 다른 구문 응용 프로그램으로, 반복적으로 실행하려는 문자열로 구성된 코드를 나타냅니다.
- delay는 각 지연의 밀리초 수(1초는 1000밀리초와 동일)이며, 그 이후에는 함수에 대한 각 호출이 발생합니다. setTimeout과 마찬가지로 실제 지연 시간은 약간 더 길 수 있습니다.
- 표준 브라우저와 IE10은 첫 번째 구문에서 지연된 함수에 추가 매개변수를 전달하는 기능을 지원합니다.
<script type="text/javascript"> setTimeout( function(param){ alert(param)} , 100, 'ok'); </script>
다섯 번째 항목을 간단히 테스트했는데, 내 컴퓨터에서 Firefox와 IE9를 사용하여 전자는 원활하게 팝업되는 반면 후자는 정의되지 않은 팝업으로 나타납니다.
setTimeout()에 의해 호출된 코드는 해당 코드가 위치한 함수와 완전히 별개의 실행 환경에서 실행됩니다. 이로 인해 이 코드에 포함된 this 키워드가 창(전역 개체) 개체를 가리키게 됩니다. 예상대로 값이 동일하지 않습니다. setInterval의 상황도 비슷합니다.
<script type="text/javascript"> //this指向window function shape(name) { this.name = name; this.timer = function(){alert('my shape is '+this.name)}; setTimeout(this.timer, 50); } new shape('rectangle'); </script>
전달되지 않았습니다. 크롬, 파이어폭스, IE9로 시도해보았는데 결과는 같았습니다.
<script type="text/javascript"> function shape(name) { this.name = name; this.timer = function(){alert('my shape is '+this.name)}; var _this = this; setTimeout(function() {_this.timer.call(_this)}, 50); } new shape('rectangle'); </script>
함수는 Javascript 클로저 덕분에 지역 변수 _this를 호출할 수 있습니다. 여기에는 범위 체인 및 기타 지식이 포함됩니다. 관심이 있다면 직접 배울 수 있습니다. 여기서는 다루지 않겠습니다.
해결책 2:이 방법은 좀 화려하네요. setTimeout 및 setInterval을 사용자 정의했습니다. 이는 또한 낮은 버전의 IE 브라우저가 지연 기능에 추가 매개변수 전달을 지원하지 않는 문제를 확장합니다.
<script type="text/javascript"> //自定义setTimeout与setInterval var __nativeST__ = window.setTimeout, __nativeSI__ = window.setInterval; window.setTimeout = function (vCallback, nDelay /*, argumentToPass1, argumentToPass2, etc. */) { var oThis = this, aArgs = Array.prototype.slice.call(arguments, 2); return __nativeST__(vCallback instanceof Function ? function () { vCallback.apply(oThis, aArgs); } : vCallback, nDelay); }; window.setInterval = function (vCallback, nDelay /*, argumentToPass1, argumentToPass2, etc. */) { var oThis = this, aArgs = Array.prototype.slice.call(arguments, 2); return __nativeSI__(vCallback instanceof Function ? function () { vCallback.apply(oThis, aArgs); } : vCallback, nDelay); }; function shape(name) { this.name = name; this.timer = function(other){ alert('my shape is '+this.name); alert('extra param is '+ other); }; } var rectangle = new shape('rectangle'); setTimeout.call(rectangle, rectangle.timer, 50, 'other'); </script>
2. setTimeout 및 setInterval을 확장하면 aArgs는 인수 변수를 분할하여 추가 매개변수 배열을 얻습니다
3. vCallback instanceof Function을 사용하여 함수인지 코드인지 확인합니다. 함수인 경우 Apply를 사용하여 실행합니다.
4. SetTimeout은 호출과 함께 실행되며 이 객체와 기타 func, 지연 및 기타 매개변수를 설정합니다.
5. setTimeout을 확장하면 하위 버전의 IE를 사용하는 브라우저에서도 추가 매개변수를 실행할 수 있습니다
3. setTimeout과 setInterval의 차이점
看上去,两个功能是差不多的,但是里面其实是不一样的。
setTimeout回调函数的执行和上一次执行之间的间隔至少有100ms(可能会更多,但不会少于100ms)
setInterval的回调函数将尝试每隔100ms执行一次,不论上次是否执行完毕,时间间隔理论上是会<=delay的。
setInterval:
<script type="text/javascript"> function sleep(ms) { var start = new Date(); while (new Date() - start <= ms) {} } var endTime = null; var i = 0; setInterval(count, 100); function count() { var elapsedTime = endTime ? (new Date() - endTime) : 100; i++; console.log('current count: ' + i + '.' + 'elapsed time: ' + elapsedTime + 'ms'); sleep(200); endTime = new Date(); } </script>
从firefox的firebug可以查看到,时间间隔很不规则。
情况大致是这样的:由于count函数的执行时间远大于setInterval的定时间隔,那么定时触发线程就会源源不断的产生异步定时事件,并放到任务队列尾而不管它们是否已被处理,但一旦一个定时事件任务处理完,这些排列中的剩余定时事件就依次不间断的被执行。
setTimeout:
<script type="text/javascript"> function sleep(ms) { var start = new Date(); while (new Date() - start <= ms) {} } var endTime = null; var i = 0; setTimeout(count, 100); function count() { var elapsedTime = endTime ? (new Date() - endTime) : 100; i++; console.log('current count: ' + i + '.' + 'elapsed time: ' + elapsedTime + 'ms'); sleep(200); endTime = new Date(); setTimeout(count, 100); } </script>
以上就是本文的全部内容,希望对大家学习javascript定时器有所帮助。

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











WebSocket 및 JavaScript를 사용하여 온라인 음성 인식 시스템을 구현하는 방법 소개: 지속적인 기술 개발로 음성 인식 기술은 인공 지능 분야의 중요한 부분이 되었습니다. WebSocket과 JavaScript를 기반으로 한 온라인 음성 인식 시스템은 낮은 대기 시간, 실시간, 크로스 플랫폼이라는 특징을 갖고 있으며 널리 사용되는 솔루션이 되었습니다. 이 기사에서는 WebSocket과 JavaScript를 사용하여 온라인 음성 인식 시스템을 구현하는 방법을 소개합니다.

WebSocket과 JavaScript: 실시간 모니터링 시스템 구현을 위한 핵심 기술 서론: 인터넷 기술의 급속한 발전과 함께 실시간 모니터링 시스템이 다양한 분야에서 널리 활용되고 있다. 실시간 모니터링을 구현하는 핵심 기술 중 하나는 WebSocket과 JavaScript의 조합입니다. 이 기사에서는 실시간 모니터링 시스템에서 WebSocket 및 JavaScript의 적용을 소개하고 코드 예제를 제공하며 구현 원칙을 자세히 설명합니다. 1. 웹소켓 기술

JavaScript 및 WebSocket을 사용하여 실시간 온라인 주문 시스템을 구현하는 방법 소개: 인터넷의 대중화와 기술의 발전으로 점점 더 많은 레스토랑에서 온라인 주문 서비스를 제공하기 시작했습니다. 실시간 온라인 주문 시스템을 구현하기 위해 JavaScript 및 WebSocket 기술을 사용할 수 있습니다. WebSocket은 TCP 프로토콜을 기반으로 하는 전이중 통신 프로토콜로 클라이언트와 서버 간의 실시간 양방향 통신을 실현할 수 있습니다. 실시간 온라인 주문 시스템에서는 사용자가 요리를 선택하고 주문을 하면

WebSocket과 JavaScript를 사용하여 온라인 예약 시스템을 구현하는 방법 오늘날의 디지털 시대에는 점점 더 많은 기업과 서비스에서 온라인 예약 기능을 제공해야 합니다. 효율적인 실시간 온라인 예약 시스템을 구현하는 것이 중요합니다. 이 기사에서는 WebSocket과 JavaScript를 사용하여 온라인 예약 시스템을 구현하는 방법을 소개하고 구체적인 코드 예제를 제공합니다. 1. WebSocket이란 무엇입니까? WebSocket은 단일 TCP 연결의 전이중 방식입니다.

JavaScript 및 WebSocket: 효율적인 실시간 일기 예보 시스템 구축 소개: 오늘날 일기 예보의 정확성은 일상 생활과 의사 결정에 매우 중요합니다. 기술이 발전함에 따라 우리는 날씨 데이터를 실시간으로 획득함으로써 보다 정확하고 신뢰할 수 있는 일기예보를 제공할 수 있습니다. 이 기사에서는 JavaScript 및 WebSocket 기술을 사용하여 효율적인 실시간 일기 예보 시스템을 구축하는 방법을 알아봅니다. 이 문서에서는 특정 코드 예제를 통해 구현 프로세스를 보여줍니다. 우리

JavaScript 튜토리얼: HTTP 상태 코드를 얻는 방법, 특정 코드 예제가 필요합니다. 서문: 웹 개발에서는 서버와의 데이터 상호 작용이 종종 포함됩니다. 서버와 통신할 때 반환된 HTTP 상태 코드를 가져와서 작업의 성공 여부를 확인하고 다양한 상태 코드에 따라 해당 처리를 수행해야 하는 경우가 많습니다. 이 기사에서는 JavaScript를 사용하여 HTTP 상태 코드를 얻는 방법과 몇 가지 실용적인 코드 예제를 제공합니다. XMLHttpRequest 사용

사용법: JavaScript에서 insertBefore() 메서드는 DOM 트리에 새 노드를 삽입하는 데 사용됩니다. 이 방법에는 삽입할 새 노드와 참조 노드(즉, 새 노드가 삽입될 노드)라는 두 가지 매개 변수가 필요합니다.

타이머 표현식은 작업의 실행 계획을 정의하는 데 사용됩니다. 타이머 표현은 "주어진 시간 간격 후에 작업을 실행"하는 모델을 기반으로 합니다. 표현식은 일반적으로 초기 지연과 시간 간격의 두 부분으로 구성됩니다.
