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

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

怎么理解這里出現的問題?

怎么理解這里出現的問題?

我要沖錢 2017-05-04 18:36:12
<script?type="text/javascript"> ??var?num=0; ??var?i; ??function?startCount(){ ????clearTimeout(i) ????document.getElementById('count').value=num; ????num=num+1; ????i=setTimeout("startCount()",1000) ??? ??} </script>主要問題是clearTimeout();這樣的,如果像上面那樣寫,那么就正常了,無論我在外面多少次調用這個函數,他的運行都是正常的,不會疊加。但如果變成這樣-----------<script type="text/javascript">? var num=0;? function startCount(){? ? clearTimeout(i)? ? document.getElementById('count').value=num;? ? num=num+1;? ? ?var i=setTimeout("startCount()",1000)? }</script>就是i變成局部變量,就出現問題了,多次調用函數會疊加,這是怎么理解了?變成局部變量也應該不會影響clearTimeout()的工作吧??
查看完整描述

2 回答

已采納
?
會飛的四腳蛇

TA貢獻5條經驗 獲得超3個贊

多次調用?startCount,

你的第一段代碼,i放在函數外部,每次運行函數時都會清除上一個定時器,結果是只有最后一個定時器在起作用,

第二段代碼,i局部變量,每次運行函數,i就會初始化一次,clearTimeout(i)在這里是不起作用的,開一個定時器,但并不會清除,結果是num的值被4個定時器影響疊加。

查看完整回答
反對 回復 2017-05-04
  • 我要沖錢
    我要沖錢
    每次調用函數,函數里面聲明的變量都會初始化嗎?
  • 會飛的四腳蛇
    會飛的四腳蛇
    不累加的那段代碼的i都會初始化,只要函數調用,clearTimeout(i)中,i都是undefined,你可以在控制臺里打斷點調試觀察函數調用棧
?
想成為攻城師的筱筱

TA貢獻15條經驗 獲得超22個贊

第一眼看見的是你粘貼的代碼中有兩行少了分號,是粘貼的問題還是程序中就忘記寫了?

查看完整回答
反對 回復 2017-05-04
  • 我要沖錢
    我要沖錢
    嗯,我是ctrlc出來的,不過這應該不是問題所在
  • 2 回答
  • 2 關注
  • 1847 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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