자바 스크립트 타이머 예제

다음 예제는 2초마다 메시지를 표시합니다. 5초 후 출력이 중지됩니다: setTimeout을 루프에 넣을 수 있지만 타이머 API는 setInterval 함수도 제공하므로 영원히 무언가를 해야 하는 요구 사항을 달성할 수 있습니다. 노드 명령으로 example1.js 파일을 실행하면 노드가 4초 동안 일시 중지된 다음 인사말 메시지를 인쇄합니다(그 후 종료). setTimeout 메서드는 시간 시간을 취소 하는 전역 clearTimeout 메서드에 전달할 수 있는 타이머 ID를 반환 합니다. 다음 예제를 예로 들자면, 몇 가지 간단한 타이머를 만들었으니 다시 유용성과 문제를 분리하는 것에 대해 생각할 수 있습니다. 우리는 «카운트 다운 타이머가 무엇을해야합니까?» 이 ID는 타이머를 비활성화하거나 지우고 코드 실행을 미리 중지하는 데 사용할 수 있습니다. 타이머 지우기는 clearTimeout() 및 clearInterval()의 두 가지 함수를 사용하여 수행할 수 있습니다. 서버 측 JavaScript의 경우 해당 제한이 존재하지 않으며 Node.js에 대한 setImmediate와 같은 즉각적인 비동기 작업을 예약하는 다른 방법이 있습니다. 따라서 이 메모는 브라우저에 따라 다릅니다. 자바 스크립트 타이머 예제 자습서는 오늘의 주요 주제입니다. 자바 스크립트 코드의 실행을 지연하려면 시간 간격 함수를 사용해야합니다. 이러한 시간 간격을 타이밍 이벤트라고 합니다. 자바 스크립트 코드의 블록은 동기적으로 실행됩니다.

그러나 실행을 지연시킬 수있는 일부 JavaScript 네이티브 함수 (타이머)가 있으며 비동기 동작을 만들 수 있습니다. 이 예제에서는 setTimeout을 사용하여 인사말 메시지 인쇄를 4초 지연시킵니다. 설정할 두 번째 인수Timeout은 지연(ms)입니다. 이것이 내가 4 초에 그것을 만들기 위해 1000에 4를 곱한 이유입니다. 이제 이 예제에서는 Node.js를 플랫폼으로 사용합니다. 따라서 하나의 server.js 파일을 만들고 위의 코드를 추가하고 다음 명령을 사용하여 파일을 실행합니다. 크롬과 파이어 폭스를 포함한 대부분의 브라우저에서 내부 타이머는 경고 / 확인 / 프롬프트를 표시하면서 «똑딱»계속. 이 와 같은 일반 함수 내에서 이 키워드를 사용하는 경우: 이 간단한 타이머는 0 ms(즉시 만들기) 후에 발사되어야 하지만 timerId 값을 캡처하고 있기 때문에 사용할 수 없습니다.

클리어 타임 아웃 호출로 바로 그 후 를 celing. setTimeout 호출은 실행을 취소하는 데 사용할 수 있는 «타이머 식별자» timerId를 반환합니다. 위의 예제에서는 1초 후에 showTime() 함수를 반복적으로 실행합니다. 이 함수는 컴퓨터의 현재 시간을 검색하여 브라우저에 표시합니다. 브라우저에서 기본 타이머 함수는 몇 가지 다른 기능과 개체가 있는 Window 인터페이스의 일부입니다. 이 인터페이스는 모든 요소를 기본 JavaScript 범위에서 전역적으로 사용할 수 있게 합니다. 따라서 브라우저 콘솔에서 직접 setTimeout을 실행할 수 있습니다. 또한 이 함수를 이름으로 사용하고 위의 예제와 같은 인라인 함수를 사용하지 않을 수도 있습니다. 트윗에 대한 답글의 절반 정도가 잘못되었습니다.

대답은 V8 (또는 다른 VM)이 아닙니다!! «자바 스크립트 타이머»로 유명하지만 setTimeout 및 setInterval와 같은 기능은 ECMAScript 사양 또는 자바 스크립트 엔진 구현의 일부가 아닙니다. 타이머 함수는 브라우저에 의해 구현되며 구현은 브라우저마다 다릅니다. 타이머는 Node.js 런타임 자체에 의해 기본적으로 구현됩니다. 이 게시물에서 두 개의 타이머가 있고 다시 시작되는 예는 카운트다운을 표시하고 특정 기간마다 색상 / 메시지가 변경되는 타이머가 표시되었습니다. 어떤 사람들은 이것이 나쁜 인터뷰 질문이라고 생각할 수도 있습니다 – 왜 이 문제를 아는가?! 자바 스크립트 개발자로서, 당신이하지 않으면, 그것은 당신이 완전히 V8 (및 기타 VM)가 브라우저와 노드와 상호 작용하는 방법을 이해하지 못하는 신호가 될 수 있기 때문에 이것을 알고 있다고 생각합니다.