首頁  >  文章  >  web前端  >  js 定時器setTimeout無法呼叫局部變數的解決方法_javascript技巧

js 定時器setTimeout無法呼叫局部變數的解決方法_javascript技巧

WBOY
WBOY原創
2016-05-16 17:11:561284瀏覽

javascript中定時器setTimeout的用法一般如下,調用beginrotate之後就進入定時執行rotateloop的一個過程,如下代碼:

複製代碼 程式碼如下:

var angle = 0;

function rotateloop() {
if (angle angle ;
if (angle angle ;
//use angle
//......
setTimeout("rotateloop()", 100);
}
}

function beginrotate() {
/// do something
//......
setTimeout("rotateloop()", 100);
}

這段程式碼有個問題,就是產生了一個全域變數angle,這顯然不是好的程式設計習慣,所以我們想到使用內嵌函數的方式,將程式碼改成如下: 複製程式碼
程式碼如下:


function beginrotate() {

var angle = 0;

function rotateloop() {
if angle ;
//use angle
//......
setTimeout("rotateloop()", 100);
}
}
//do something
//......
setTimeout("rotateloop()", 100);
}

這樣子改了之後,發現javascript報錯了,rotateloop找不到,顯然setTimeout沒有找到rotateloop這個局部內嵌函數,這裡只要稍微改一下就可以解決這個問題了,程式碼如下: 複製程式碼
程式碼如下:


function beginrotate() {

var angle = 0;

var angle = 0;
function rotatel {
if (angle angle ;
//use angle
//......
setTimeout(rotateloop, 100);
}
}
//do something
//......
setTimeout(rotateloop, 100);
} 只需要將setTimeout的第一個參數改成函數對象,而不是字串,就可以了。
陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn