使用javascript,我正在尝试模拟骰子掷骰子。我正在使用setTimeout,但我想在函数运行了设定的次数后执行clearTimeout,例如说10次。这就是我希望它起作用的方式。
用户单击一个按钮。然后他们看到div中显示了一系列骰子值(显然是1-6)。然后,大约说了十遍,该功能停止了。
怎么能做到?我到目前为止的代码非常简单。
function rollDice(){
diceVal = Math.floor(Math.random() * 7);
$('.dice-display').html(diceVal);
setTimeout(rollDice, 500);
// 10次后清除超时
}
$('.rollDiceButton').click(function(){
rollDice();
});
最佳答案
这是闭包的理想用例:
var rollDice = ( function rollDiceClosure(){
var iterations = 0;
return function rollDice(){
var diceVal = Math.floor(Math.random() * 7);
$('.dice-display').html(diceVal);
if( ++iterations >= 10 ){
setTimeout(rollDice, 500);
}
}
}() );
闭包为
iterations
变量创建一个空间。在setTimeout
语句之前,iterations
加1。如果等于或大于10,则不会设置超时。