2014-02-12 59 views
0

在我的个人项目上工作时,我遇到了一个问题。问题是每次我的函数循环两次计数器计数。柜台正在翻番

JavaScript代码:

function punch(){ 

var hit; 
var h1=100; 

h1-=1; 

counter++; 

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

我想它做的是,每2000毫秒计上升1

+0

不要在您的代码中找到你尝试调用冲()通过设置自己的时间间隔?每2秒钟会有1,2,4,8,...个punch()运行的实例。 – Johnny

回答

0

每次调用函数punch时,都会在您的原始代码中再次调用内部。

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,只运行一次。此外,这是优选的函数引用传递到的setInterval的setTimeout作为传递字符串调用函数的构造,有效地是EVAL,这是在系统资源方面不必要地昂贵的呼叫。

var counter = 0; 

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

punch(); 

var counter = 0; 

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

setInterval(punch, 2000); 

优点的setTimeout是,可以容易地改变该延迟基于一些其它的逻辑,或不取消超时停止序列。

注意这样做时:

hit = setInterval(...); 

值击中是可用于取消间隔的指标,它是不被(因为这是没有定义的返回值是没有回报声明)。

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>