为了账号安全,请及时绑定邮箱和手机立即绑定

为什么这样写代码不能循环

为什么这样写代码不能循环

qq_迸发激情_0 2017-05-27 12:01:29
<!DOCTYPE HTML><html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"><title>计时器</title><script type="text/javascript">  var num=0;  setTimeout(function startCount() {    document.getElementById('count').value=num;    num=num+1;    setTimeout("startCount()",1000);   },1000);</script></head><body><form><input type="text" id="count" /></form></body></html>
查看完整描述

3 回答

?
小郎Lie

TA贡献2条经验 获得超0个赞

我也很好奇为什么必须把setTimeout("startCount()", 1000); 改成setTimeout(startCount, 1000); 

虽然调试的结果确实是当使用setTimeout("startCount()", 1000);的时候,浏览器居然会报错VM325:1 Uncaught ReferenceError: startCount is not defined    at <anonymous>:1:1

更神奇的是,如果我用setTimeout(startCount(),1000); 调试运行居然会一直调用startCount(),导致浏览器报错setTimeOut.html:8

求大神解答


查看完整回答
反对 回复 2017-05-28
  • 千秋此意
    千秋此意
    这个例子里你setTimeout(startCount(),1000);这样写就相当于 function foo() { foo(); } 这种写法了,就是一个无限递归的死循环肯定报错的。。
?
qq_迸发激情_0

TA贡献1条经验 获得超0个赞

为什么要这样改

setTimeout("startCount()", 1000); 

改成

setTimeout(startCount, 1000); 

上面的不是等效的吗?

查看完整回答
反对 回复 2017-05-28
?
hahhhha

TA贡献50条经验 获得超32个赞

下面的代码试一下效果。

<!DOCTYPE HTML>
<html>
<head>
	<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
	<title>计时器</title>
</head>
<body>
	<form>
		<input type="text" id="count" />
	</form>
</body>
	<script type="text/javascript">
		(function(){
			var ele = document.getElementById('count'),
				num = 0;
			var startCount =function(){
				ele.value = num++;
				setTimeout(startCount,1000); 
			};
			startCount();
		}());
	</script>
</html>


查看完整回答
反对 回复 2017-05-27
  • 慕运维2284031
    慕运维2284031
    虽然没试,但是觉得你的解法比其他几楼靠谱 一般来说定时器是传入函数名的或者匿名函数,但一般不直接在此处定义非匿名函数 所以应该是把该函数单独封装,再传入函数名即可
  • 3 回答
  • 0 关注
  • 2071 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信