Javascript JS中的老虎机-堆栈调用大小超过

Javascript JS中的老虎机-堆栈调用大小超过,javascript,Javascript,我正在尝试制作一个基本的(非动画的)老虎机,但是堆栈大小出现了一个错误 我希望有人能解释原因=/ 我的错误: Uncaught RangeError: Maximum call stack size exceeded 代码: window.requestAnimFrame=(函数(){ return window.requestAnimationFrame | | window.webkitRequestAnimationFrame | | window.mozRequestAnimation

我正在尝试制作一个基本的(非动画的)老虎机,但是堆栈大小出现了一个错误

我希望有人能解释原因=/

我的错误:

Uncaught RangeError: Maximum call stack size exceeded
代码:

window.requestAnimFrame=(函数(){
return window.requestAnimationFrame | |
window.webkitRequestAnimationFrame | |
window.mozRequestAnimationFrame | |
window.oRequestAnimationFrame | |
window.msRequestAnimationFrame | |
函数(回调,元素){
设置超时(回调,1000/60);
};
})();
var img_数组=新数组(“火”、“生命”、“闪电”、“雨”、“雪”、“声音”、“太阳”);
功能滚动(开始时间){
var seconds\u passed=new Date().getTime()/1000-开始时间;
如果(通过的秒数<3){
槽=1;
而(插槽<4){
randno=Math.floor(Math.random()*img_array.length);
getElementById(“slot”+slot).innerHTML='';
slot++;
}
请求帧(滚动(开始时间));
}否则{
document.getElementById(“开始”).innerHTML='再次滚动插槽?';
document.getElementById(“start”).onclick=function(){start();};
}
返回false;
}
函数start(){
开始时间=新日期().getTime()/1000;
document.getElementById(“开始”).innerHTML='Processing…';
滚动(开始时间);
}
window.onload=函数(){
document.getElementById(“开始”).innerHTML='Roll The Slots';
document.getElementById(“start”).onclick=function(){start();};
}

我的错误在哪里?

您正在进行没有保护表达式的递归调用


函数roll(start_time)
while()
块结束后立即调用
roll
(作为requestAnimFrame的值参数)。

您正在进行无保护表达式的递归调用


函数roll(开始时间)
while()
块结束后立即调用
roll
(作为requestAnimFrame的值参数)。

这只是递归调用
roll
三秒钟,这将超过最大调用堆栈大小:

requestAnimFrame(roll(start_time));
你可能是说:

requestAnimFrame(function() {
    roll(start_time);
});

这只需递归调用
roll
三秒钟,这将超过最大调用堆栈大小:

requestAnimFrame(roll(start_time));
你可能是说:

requestAnimFrame(function() {
    roll(start_time);
});

根据定义,
requestAnimFrame
函数不接受任何参数。@David:是的,它接受。看到结尾的括号了吗?它会立即被调用并返回一个函数,该函数实际上会接受一个参数。只需添加一点,我是否可以在不使用set interval的情况下减慢AnimFrame=/的速度?它叫得很快,对我的眼睛来说太快了……啊,我没发现。这个狡猾的函数包装在一段时间后会变得混乱。
requestAnimFrame
函数,按照定义,不接受任何参数。@David:是的,它接受。看到结尾的括号了吗?它会立即被调用并返回一个函数,该函数实际上会接受一个参数。只需添加一点,我是否可以在不使用set interval的情况下减慢AnimFrame=/的速度?它叫得很快,对我的眼睛来说太快了……啊,我没发现。这种偷偷摸摸的函数包装会在一段时间后变得混乱。