0
newnooftimes = nooftimes + 1;
if (nooftimes < 10) {
    setTimeout("roll(newnooftimes);", 150);
}

对比

if (nooftimes < 10) {
    setTimeout("roll(nooftimes + 1);", 150);
}

为什么后者不起作用,即使前者起作用?

编辑:这是我的全部功能。似乎变量超出范围可能存在一些问题?我是 javascript 的新手,所以希望能得到一些帮助来指出我出了什么问题。此功能使用之前回复中建议的代码,但仍然不起作用。roll() 仅被函数外的另一个调用调用一次。递归永远不会发生 - 为什么?

function roll(nooftimes) {
    ctx.clearRect(dicex,dicey,diceWidth,diceHeight); //clears the space where the dice face may have been already drawn
    var roll = 1+Math.floor(Math.random()*6);
    drawFace(roll); 
    if (nooftimes < 10) {
        setTimeout(function () { roll(nooftimes + 1); }, 150);
    }
}
4

1 回答 1

1

将其包装在 lambda 中。您应该将函数传递给它,而不是函数调用。虽然浏览器经常试图弄清楚你的意图,但有时一些粗略的事情会起作用。

if (nooftimes < 10) {
    setTimeout(function () { roll(nooftimes + 1); }, 150);
}
于 2013-01-07T04:32:53.957 回答