繁体   English   中英

setTimeout function 无限运行

[英]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.

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