真有意思,誰能告訴我這是為什么?
<!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開始計數,stop停止計數并歸零。
點擊1次start正常顯示,并且stop只需要點擊1次就OK。
點擊n(n>1)次start時,計數器以n倍速度計數,并且每點擊1次stop,計數倍速減一,直至歸零。
上一小節就發現了這個問題,請問這是為什么?
我猜一下:是因為每點擊一次start就生成了一個計數函數,并且這些計數函數共用同一個全局變量num,然后每點擊1次stop就clear一個?是這樣嗎?~~
2015-04-02
不完全是n倍速,與你的點擊時機有關。
由于你的num是全局變量,所有計時器都對同一個num進行操作,所以越多計時器,num增加越快,而且計時器之間開始時間如果都是整秒的話,就能形成n倍速的效果。