[英]How can I access the same variable in recursive call of a function in javascript?
function onload_animate(id_name, img_src1, img_src2, time_ms){
document.getElementById(id_name).src = img_src1;
setTimeout("onload_animate(id_name, img_src1, img_src2, time_ms)", time_ms);
document.getElementById(id_name).src = img_src2;
}
這是我給定的代碼。 我想在每個遞歸調用中從setTimeout()中的onload_animate(param1,param2,...)訪問相同的參數值。 怎么可能呢?
如果將settimeout
回調放入匿名函數中,則它將正常工作。 這樣,參數將保留在范圍內。
function onload_animate(id_name, img_src1, img_src2, time_ms){
document.getElementById(id_name).src = img_src1;
setTimeout(
function(){
onload_animate(id_name, img_src1, img_src2, time_ms);
}, time_ms);
document.getElementById(id_name).src = img_src2;
}
嘗試閱讀有關javascript 閉包的信息 ,它們非常有用。
傳遞setTimeout
字符串被認為是不好的做法。 這類似於使用eval()
,這在JavaScript中是邪惡的。
function onload_animate(id_name, img_src1, img_src2, time_ms){
document.getElementById(id_name).src = img_src1;
setTimeout(function () {
onload_animate(id_name, img_src1, img_src2, time_ms);
}, time_ms);
document.getElementById(id_name).src = img_src2;
};
將捕獲變量,以便它們在setTimeout
中可用。 請注意,此功能目前將永遠循環; 您需要某種形式的退出(通常檢查條件條件;例如time_ms
過期?)
您的代碼應該看起來像這樣;
function onload_animate(id_name, img_src1, img_src2, time_ms) {
document.getElementById(id_name).src = img_src1;
setTimeout(function () {
onload_animate(id_name, img_src2, img_src1, time_ms);
}, time_ms);
};
有關工作示例,請參見以下代碼段: http : //www.jsfiddle.net/3vKnW/ 。
JavaScript不等待setTimeout
完成。 它是異步的。 JavaScript將到達setTimeout
行,安排要在time_ms
時間運行該函數,但隨后將返回並繼續從中斷處執行。
使用setInterval
會更好嗎?
var int=self.setInterval("onload_animate()",time_ms);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.