错误:嵌套在自身函数中的“未捕获的RangeError:超出最大调用堆栈大小”

时间:2014-01-23 01:10:29

标签: javascript button stack-size

我一直收到错误“Uncaught RangeError:超出最大调用堆栈大小”,我已将其缩小到此代码:

//Play Button Checking
var checker = false;
var playButton = function(){
    if(mouseX > 100 && mouseX > 300 && mouseY > 150 && mouseY < 250 && mouseIsPressed){
        checker = true;
    } else {
        playButton();
    }
};
while(checker===false){
    playButton();
}

1 个答案:

答案 0 :(得分:1)

除非if语句中的鼠标条件为真,否则您的函数会递归调用自身。因为它永远不会更新任何变量,所以如果在最初调用函数时它们不是真的,它们将永远不会变为真。

如果你有一个设置这些变量的事件处理程序,它将永远不会有机会运行。 Javascript是单线程的,事件处理程序仅在代码返回浏览器的主空闲循环时运行。

如果您想在用户按下鼠标按钮时更改某些内容,则应将处理程序绑定到相应元素上的clickmousedown事件(如果它可以位于文档中的任何位置,将其附加到document元素。)