在处理我的个人项目时,我遇到了一个问题。问题是每次我的函数循环计数器计数两次。
JavaScript代码:
function punch(){
var hit;
var h1=100;
h1-=1;
counter++;
hit=setInterval('punch()',2000);
}
我想要做的是每2000毫秒计数器上升1。
答案 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>