新手求助,setTimeout()内存溢出问题。。

XNightSky 2010-03-24 02:09:19
刚刚开始学习JS,看到使用Date对象创建简单时钟

<script language="javascript" type="text/javascript">
function showTime(){
var time = new Date();
var hours = time.getHours();
var minute = time.getMinutes();
var second = time.getSeconds();
if(hours<10)
hours = "0" + hours;
if(minute<10)
minute = "0" + minute;
if(second<10)
second = "0" + second;

document.getElementsByName('txtTime')[0].value = hours + ":" + minute + ":" + second;
setTimeout("showTime()",1000);
}
</script>

setTimeout("showTime()",1000);一切正常
换成setTimeout(showTime(),1000);就内存溢出了——out memory at line:19
为什么呢?
...全文
556 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
XNightSky 2010-03-24
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 lonelystark 的回复:]

恩应该是这个意思
偶猜测
程序努力获取一个字符串
就去执行showtime
但是你在showtime里又执行showtime
而不返回任何字符
所以会超过内存死循环

如果你是settimeout(a(),1000)
function a(){
return('aaa()');
}
估计就不会死掉
你可以试试
[/Quote]
果然如此,LonelyStark好人啊!结贴!
LonelyStark 2010-03-24
  • 打赏
  • 举报
回复
恩应该是这个意思
偶猜测
程序努力获取一个字符串
就去执行showtime
但是你在showtime里又执行showtime
而不返回任何字符
所以会超过内存死循环

如果你是settimeout(a(),1000)
function a(){
return('aaa()');
}
估计就不会死掉
你可以试试
XNightSky 2010-03-24
  • 打赏
  • 举报
回复
我的意思是。。是不是。步进到setTimeout(showTime(),1000)是无法识别showTime() ,或者进入showTime()方法再次步进到setTimeout(showTime(),1000),再进入showTime(),然后就死循环了?
foolbirdflyfirst 2010-03-24
  • 打赏
  • 举报
回复
setTimeout("showTime()",1000);

or

setTimeout(showTime,1000);
XNightSky 2010-03-24
  • 打赏
  • 举报
回复
意思是如果该setTimeout方法的第一个参数输入的不是字符串,会无法识别,然后内存溢出或者死循环?
LonelyStark 2010-03-24
  • 打赏
  • 举报
回复
因为setTimeout('函数名',time)这是这个函数的格式
调用的函数名必须用''或者""扩起来
说白了
第一个参数必须是个字符串
而这个字符串是某个要调用的函数名

87,921

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧