在我的个人项目上工作时,我遇到了一个问题。问题是每次我的函数循环两次计数器计数。柜台正在翻番
JavaScript代码:
function punch(){
var hit;
var h1=100;
h1-=1;
counter++;
hit=setInterval('punch()',2000);
}
我想它做的是,每2000毫秒计上升1
在我的个人项目上工作时,我遇到了一个问题。问题是每次我的函数循环两次计数器计数。柜台正在翻番
JavaScript代码:
function punch(){
var hit;
var h1=100;
h1-=1;
counter++;
hit=setInterval('punch()',2000);
}
我想它做的是,每2000毫秒计上升1
每次调用函数punch时,都会在您的原始代码中再次调用内部。
var counter = 0;
function punch(){
var h1=100;
h1-=1;
counter++;
}
var hit = setInterval(punch,2000);
window.setInterval(function(){
/// call your function here
}, 2000);
打电话给你的函数,其中评论和函数内增加你的计数器。
var counter = 0;
var h1=100;
setInterval(punch,2000);
function punch(){
h1-=1;
counter++;
}
在这里你去: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>
的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(...);
的值击中是可用于取消间隔的指标,它是不被冲(因为这是没有定义的返回值是没有回报声明)。
不要在您的代码中找到你尝试调用冲()通过设置自己的时间间隔?每2秒钟会有1,2,4,8,...个punch()运行的实例。 – Johnny