为什么我的JavaScript代码进入无限循环?
问题描述:
在下面的代码中,无论何时点击提交按钮,多个窗口都会以无限循环方式打开。如果我取消注释警报,那么多个警报会像无限循环一样弹出。为什么会发生这种情况?为什么我的JavaScript代码进入无限循环?
<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>
答
您正在创建一个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.
}
也许你想要的是使用另一种名称为您的功能,并与prede调用实际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
。
答
的问题是,您所呼叫的funtion 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>
您有一个三线功能,不能明白为什么它的无限循环? – j08691
当你在全局范围内声明一个函数时,它会附加到浏览器中的window对象。也就是说,你创建一个名为'moveBy'的函数,然后在其内部调用它。 – doogle
你不能给'window'分配一个新的值。 'window = ....'不会改变'window'的值,所以你函数最后一行的'window'仍然是全局'window'对象。 – JLRishe