为什么我的javascript代码会进入无限循环?

时间:2015-11-04 16:52:05

标签: javascript infinite-loop

在下面的代码中,每当我点击提交按钮时,多个窗口就会打开,因为它处于无限循环中。如果我取消注释警报,那么多个警报会像无限循环一样弹出。为什么会发生这种情况?

<html>
<head>

<script type = "text/javascript">
    var window;

    function moveBy() {
        //alert("-- hello ---");
        window = window.open("http://www.w3schools.com");
        window.moveBy(10, 20);
    }
</script>


</head>
<body>
<input type = "submit" value = "moveBy" onclick = "moveBy()"> </input>
</body>
</html>

4 个答案:

答案 0 :(得分:8)

Javascript不支持方法重载,因此通过调用window.moveBy(10, 20);,您实际上基本上再次调用moveBy(),从而导致无限循环。

从自身调用函数称为enter image description here。链接的帖子很好地阅读了这个主题,并将指导您可能想要它的位置。但在你的情况下,你显然没有。

阅读recursion文章以获取更多详细信息。

为防止这种情况发生,您可以将moveBy()功能重命名为myMoveBy()或更好openAndMoveBy()

答案 1 :(得分:7)

因为您从自身调用函数moveBy

答案 2 :(得分:3)

您正在通过调用window.moveBy函数中的moveBy创建recursion(自行调用的函数),而不会说明断点或退出案例:

function moveBy() {
    //alert("-- hello ---");
    window = window.open("http://www.w3schools.com");
    window.moveBy(10, 20); //recursion, it will call this function over and over again.
}

也许您想要的是为您的函数使用另一个名称,并使用预定义的参数调用实际的window.moveBy内部:

function customMoveBy() {
    //alert("-- hello ---");
    window = window.open("http://www.w3schools.com");
    window.moveBy(10, 20);
}

<input type = "submit" value = "moveBy" onclick = "customMoveBy()"> </input>

答案 3 :(得分:1)

问题是你在函数moveBy中调用函数moveBy。无论何时执行该功能,都会一次又一次地调用它......

试试这个:

<html>
<head>

<script type = "text/javascript">
    var window;

    function moveBy() {
        alert("-- hello ---");
        window = window.open("http://www.w3schools.com");
        //window.moveBy(10, 20);
    }
</script>


</head>
<body>
<input type = "submit" value = "moveBy" onclick = "moveBy()"> </input>
</body>
</html>