[英]setTimeout function is running infinitely
我读到 setTimeout function 只运行一次, setInterval function 无限运行。 但是在我从 w3schools setTimeout 中挑选的这个数字时钟代码中,它也无限运行。 它与 onload 方法有关吗?
<!DOCTYPE html>
<html>
<head>
<script type="text/javascript">
function startTime() {
var today = new Date();
var h = today.getHours();
var m = today.getMinutes();
var s = today.getSeconds();
m = checkTime(m);
s = checkTime(s);
document.getElementById('txt').innerHTML =
h + ":" + m + ":" + s;
var t = setTimeout(startTime, 500);
}
function checkTime(i) {
if (i < 10) {
i = "0" + i
}; // add zero in front of numbers < 10
return i;
}
</script>
</head>
<body onload="startTime()">
<div id="txt"></div>
</body>
</html>
这是递归的教科书案例 - setTimeout()
调用startTime()
,它调用setTimeout()
...它又调用startTime()
。
你需要打破这个循环。 简而言之,如果没有通过不调用startTime()
() 的 function 的某些路径,则不能从startTime()
() 中调用startTime()
此版本的setInterval
无限运行,因为startTime
function 是递归 function 。 递归 function 是 function 在执行期间调用自身,这意味着 function 在大多数情况下无限运行。
看这里:
function startTime() {
// Code...
var t = setTimeOut(startTime, 500);
}
setTimeOut
正在调用startTime
function,而后者又在调用setTimeOut
function ......而且它还在继续。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.