javascript中定時器setTimeout的用法一般如下,呼叫beginrotate之後就進入定時執行rotateloop的一個過程,如下程式碼:
複製代碼代碼如下:
var angle = 0;
function rotateloop() {
if (angle < 360) {
angle++;
//use angle
//......
setTimeout("rotateloop()", 100);
}
}
function beginrotate() {
//do something
//......
setTimeout("rotateloop()", 100);
}
這段程式碼有一個問題,就是產生了一個全域變數angle,這顯然不是好的程式設計習慣,所以我們想到使用內嵌函數的方式,將程式碼改成如下:
複製代碼代碼如下:
function beginrotate() {
var angle = 0;
function rotateloop() {
if (angle < 360) {
angle++;
//use angle
//......
setTimeout("rotateloop()", 100);
}
}
//do something
//......
setTimeout("rotateloop()", 100);
}
這樣子改了之後,發現javascript報錯了,rotateloop找不到,顯然setTimeout沒有找到rotateloop這個局部內嵌函數,這裡只要稍微改一下就可以解決這個問題了,程式碼如下:
複製代碼代碼如下:
function beginrotate() {
var angle = 0;
function rotateloop() {
if (angle < 360) {
angle++;
//use angle
//......
setTimeout(rotateloop, 100);
}
}
//do something
//......
setTimeout(rotateloop, 100);
}
只需要將setTimeout的第一個參數改成函數對象,而不是字串,就可以了。