繁体   English   中英

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

[英]Why is my javascript code going into an 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>

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

从自身调用函数称为递归 链接的帖子是关于这个主题很好看,并且会指导你,你可能它。 但就您而言,您显然没有。

有一个读文章了解更多详情。

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

因为您从自身调用了函数moveBy

您正在通过在moveBy函数内部调用window.moveBy来创建递归 (调用自身的函数),而没有说明断点或退出情况:

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>

问题在于您正在函数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>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM