簡體   English   中英

如何在JavaScript中遞歸調用函數時訪問相同的變量?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM