1

基本的な (アニメーション化されていない) スロット マシンを作成しようとしていますが、スタック サイズに関するエラーが発生します。

誰かが原因を説明できることを願っています =/

私のエラー:

Uncaught RangeError: Maximum call stack size exceeded

コード:

    window.requestAnimFrame = (function(){
      return  window.requestAnimationFrame       || 
              window.webkitRequestAnimationFrame || 
              window.mozRequestAnimationFrame    || 
              window.oRequestAnimationFrame      || 
              window.msRequestAnimationFrame     || 
              function( callback,  element){
                window.setTimeout(callback, 1000 / 60);
              };
    })();
var img_array = new Array('fire','life','lightning','rain','snow','sound','sun');


function roll(start_time){
var seconds_passed = new Date().getTime() / 1000 - start_time ;

if(seconds_passed < 3){
    slot = 1;
    while(slot < 4){
        randno = Math.floor(Math.random()*img_array.length);
        document.getElementById("slot"+slot).innerHTML = '<img src="'+img_array[randno]+'.png"/>';
        slot++;
        }
    requestAnimFrame(roll(start_time));     
    } else {
    document.getElementById("start").innerHTML = 'Roll The Slots Again?';
    document.getElementById("start").onclick = function(){start(); };
    }
    return false;
}

function start(){
start_time = new Date().getTime() / 1000;
document.getElementById("start").innerHTML = 'Processing......';
roll(start_time);
}

window.onload = function(){
document.getElementById("start").innerHTML = 'Roll The Slots';
document.getElementById("start").onclick = function(){start(); };
}

私の間違いはどこですか?

4

2 に答える 2

1

これrollは 3 秒間再帰的に呼び出すだけで、最大呼び出しスタック サイズを超えます。

requestAnimFrame(roll(start_time));

あなたはおそらく次のことを意味していました:

requestAnimFrame(function() {
    roll(start_time);
});
于 2012-09-01T23:52:20.730 に答える
0

ガード式なしで再帰呼び出しを行っています。

function roll(start_time)ブロックが終了rollした直後に (requestAnimFrame の値引数として) を呼び出します。while()

于 2012-09-01T23:52:11.020 に答える