2014-02-12 2 views
0

내 개인 프로젝트에서 작업하는 동안 문제가 발생했습니다. 문제는 함수가 카운터를 두 번 반복 할 때마다 발생합니다.카운터가 두 배가됩니다

자바 스크립트 코드 :

function punch(){ 

var hit; 
var h1=100; 

h1-=1; 

counter++; 

hit=setInterval('punch()',2000); 
} 

내가 그것을하고 싶었던 것은 주석과 기능 내부에 카운터를 증가 곳마다 2000 밀리 초 카운터가 함수 호출 최대 1

+0

에 대한 읽기 당신은) (당신이 펀치를 호출 할 코드에서 찾을 수 없습니까 내부에 간격을 설정하여? 매 2 초마다 1, 2, 4, 8, ... 실행중인 펀치() 인스턴스가 있습니다. – Johnny

답변

0

함수 펀치가 호출 될 때마다 원래 코드가 내부적으로 다시 호출됩니다. 여기

var counter = 0; 

function punch(){ 
    var h1=100; 
    h1-=1; 
    counter++; 
} 

var hit = setInterval(punch,2000); 
0
window.setInterval(function(){ 
    /// call your function here 
}, 2000); 

가는 것입니다 .

0
var counter = 0; 
var h1=100; 

setInterval(punch,2000); 

function punch(){ 
    h1-=1; 
    counter++; 
} 
0

당신은 이동 : http://jsfiddle.net/9JLdU/3/

<div id="counter"></div> 
<script> 
var hit; 
var counter = 0; 

window.punch = function() 
{ 
    var h1=100; 
    h1-=1; 
    counter++; 
    document.getElementById('counter').innerHTML=counter; 
} 

hit = setInterval('punch()',2000); 
</script> 
0

setInterval을이 취소 될 때까지 함수가 약 2 초마다 호출하게됩니다. 함수 내에서 setInterval에 대한 또 다른 호출을 포함하면 호출 할 때마다 다른 호출 순서가 설정되므로 결과적으로 수천 개의 인스턴스가 실행되고 각각은 카운터를 증가시킵니다.

그래서 하나 setInterval을 하나의 호출을 사용하거나 기능은 한 번 실행 의 setTimeout을 사용하여 자신을 호출해야합니다. 또한 문자열을 전달하면 함수 생성자를 호출하고 실질적으로 eval에 대한 호출이므로 시스템 리소스 측면에서 불필요한 비싸지 만 setIntervalsetTimeout에 함수 참조를 전달하는 것이 좋습니다.

var counter = 0; 

function punch() { 
    // ... 
    counter++; 
} 

setInterval(punch, 2000); 

var counter = 0; 

function punch() { 
    // ... 
    counter++; 
    hit = setTimeout(punch, 2000); 
} 

punch(); 

또는

의 장점은 당신이 다른 논리에 따라 지연을 변화, 또는 타임 아웃을 취소하지 않고 순서를 중지 쉽게 할 수 있다는 것입니다에서는 setTimeout. 일 것을

참고

hit = setInterval(...); 

의 값 충돌이 간격을 취소하는 데 사용할 수있는 인덱스이고, 거기서 보낸 정의되지 펀치 (의해 반환 된 값이 아닌 return 문이 아닙니다.)

0

setInterval() 메서드는 지정된 간격 (밀리 초)으로 함수를 호출하거나 식을 계산합니다.

setInterval() 메서드는 clearInterval()이 호출되거나 창이 닫힐 때까지 함수를 계속 호출합니다.

setInerval() Here

구문

setInterval(function,milliseconds) 

작업 예here

<script> 
    var hit = 100; 
    counter = 0; 
    var myVar = setInterval(function() {punch()}, 1000); 

    function punch() { 
     hit--; 
     counter++; 
    } 
</script> 
관련 문제