以下代码来自'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>
答案 0 :(得分:1)
看看这里:
setTimeout 在超时后运行代码/功能一次。
setInterval 以间隔运行代码/函数,其长度为 他们之间的超时。
对于你正在做的事情,你应该使用setInterval。
答案 1 :(得分:1)
setInterval
是好事,例如轮询某些条件。
setTimeout
如果您想要一次性事件或需要调整电话间隔,例如一个时钟应尽可能接近下一整秒后更新。
两者都可以用于大约在指定时间间隔内连续运行的事件,两者都可以取消,两者都只在指定的时间间隔内大约(尽快)运行。
顺便说一下,OP中的第一个代码示例不应该导致堆栈溢出,尽管它写得不是很好。