亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么這樣寫代碼不能循環

為什么這樣寫代碼不能循環

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 關注
  • 2238 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號