0

我不断收到错误“未捕获的 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();
}
4

1 回答 1

1

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

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

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

于 2014-01-23T01:15:10.090 回答