-1

以下代码来自'JavaScript by Example Second Edition',我认为下面的代码更好

function scroller() {
    str = str.substring(1, str.length) + str.substring(0, 1);
    document.title = str;
    window.status = str;
}
setInterval(scroller, 300);

旧代码是递归的,会继续每0.3秒调用一次,直到程序结束,我认为旧代码可能会导致堆栈溢出,对吧?

<html>
<!-- This script is a modification of a free script found at
the JavaScript source.
Author: Asif Nasir (Asifnasir@yahoo.com)
-->
<head>
    <script type="text/javascript">
        var today = new Date();
        var year = today.getFullYear();
        var future = new Date("December 25, " + year);
        var diff = future.getTime() - today.getTime();
        // Number of milliseconds
        var days = Math.floor(diff / (1000 * 60 * 60 * 24));
        // Convert to days
        var str =
         "Only " + days + " shopping days left until Christmas!";
        function scroller() {
            str = str.substring(1, str.length) + str.substring(0, 1);
            document.title = str;
            window.status = str;
            setTimeout(scroller, 300); // Set the timer
        } 
    </script>
</head>
<body onload="scroller()">
    <b>
        <font color="green" size="4">
Get Dizzy. Watch the title bar and the status bar!!
<br />
<image src="christmasscene.bmp">
</font>
</body>
</html>
4

2 回答 2

1

看看这里:

“setInterval”与“setTimeout”

setTimeout在 timeout 之后运行代码/函数一次

setInterval以间隔运行代码/函数,它们之间的超时长度。

对于您正在做的事情,您应该使用 setInterval。

于 2012-10-12T02:18:39.583 回答
1

setInterval如果您不太关心准确性,例如轮询要满足的某些条件,那就太好了。

setTimeout如果您想要一个一次性事件或需要调整调用之间的间隔,例如一个时钟,它应该尽可能接近下一整秒后更新。

两者都可以用于以大约指定的时间间隔连续运行的事件,都可以取消,都只在大约(尽快)指定的时间间隔运行。

顺便说一句,OP 中的第一个代码示例不应该导致堆栈溢出,尽管它写得不是很好。

于 2012-10-12T02:20:46.077 回答