柜台正在翻倍

时间:2014-02-12 03:25:02

标签: javascript counter

在处理我的个人项目时,我遇到了一个问题。问题是每次我的函数循环计数器计数两次​​。

JavaScript代码:

function punch(){

var hit;
var h1=100;

h1-=1;

counter++;

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

我想要做的是每2000毫秒计数器上升1。

6 个答案:

答案 0 :(得分:0)

window.setInterval(function(){
  /// call your function here
}, 2000);

调用您评论的函数,并在函数内部递增计数器。

答案 1 :(得分:0)

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

var counter = 0;

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

var hit = setInterval(punch,2000);

答案 2 :(得分:0)

var counter = 0;
var h1=100;

setInterval(punch,2000);

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

答案 3 :(得分: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>

答案 4 :(得分:0)

setInterval 将导致该函数大约每2秒被调用一次,直到被取消。通过在函数中包含对 setInterval 的另一个调用,每次调用时都会建立另一个调用序列,因此最终会有数千个实例在运行,每个实例都会递增计数器。

因此要么使用对 setInterval 的一次调用,要么让函数使用 setTimeout 调用自身,它只运行一次。此外,最好将函数引用传递给 setInterval setTimeout ,因为传递字符串会调用Function构造函数,实际上是对 eval 的调用,这在系统资源方面是不必要的昂贵。

var counter = 0;

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

punch();

var counter = 0;

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

setInterval(punch, 2000);

setTimeout 的优点是您可以根据其他逻辑轻松改变延迟,或者在不取消超时的情况下停止序列。

请注意:

hit = setInterval(...);

hit 的值是一个可用于取消间隔的索引,它不是 punch 返回的值(由于没有返回,因此未定义)语句)。

答案 5 :(得分: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>