真有意思,誰能告訴我這是為什么?
<!DOCTYPE?HTML> <html> <head> <meta?http-equiv="Content-Type"?content="text/html;?charset=utf-8"> <title>計時器</title> </head> <script?type="text/javascript"> ??var?num=0; ??var?i; ??function?startCount(){ ????document.getElementById('count').value=num; ????num=num+1; ????i=setTimeout("startCount()",1000); ??} ??function?stopCount(){ ??clearTimeout(i); ??i=0;num=0; ??document.getElementById('count').value=0; ??} </script> </head> <body> ??<form> ????<input?type="text"?id="count"?/> ????<input?type="button"?value="Start"?onclick="startCount()"?/> ????<input?type="button"?value="Stop"?onclick="stopCount()"??/> ??</form> </body> </html>
代碼如上,start開始計數(shù),stop停止計數(shù)并歸零。
點擊1次start正常顯示,并且stop只需要點擊1次就OK。
點擊n(n>1)次start時,計數(shù)器以n倍速度計數(shù),并且每點擊1次stop,計數(shù)倍速減一,直至歸零。
上一小節(jié)就發(fā)現(xiàn)了這個問題,請問這是為什么?
我猜一下:是因為每點擊一次start就生成了一個計數(shù)函數(shù),并且這些計數(shù)函數(shù)共用同一個全局變量num,然后每點擊1次stop就clear一個?是這樣嗎?~~
2015-04-02
不完全是n倍速,與你的點擊時機有關。
由于你的num是全局變量,所有計時器都對同一個num進行操作,所以越多計時器,num增加越快,而且計時器之間開始時間如果都是整秒的話,就能形成n倍速的效果。