在javascript中将等式作为参数传递

时间:2013-01-07 04:30:38

标签: javascript

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

VS

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);
    }
}

1 个答案:

答案 0 :(得分:1)

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

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