簡體   English   中英

jQuery函數遞歸-我迷路了

[英]jQuery Function Recursion - I'm lost on this one

我是jQuery的新手,我不明白為什么我在控制台日志中看到“ if if”行。 如果toggleBox在“ if of結束”控制台日志行之前調用自身,如何處理console.log()函數?

似乎第1行和第2行會重復,但是以某種方式,第3行正在運行。 看起來好像只是在跳來跳去。 toggleBox調用實際上會在調用box.fadeToggle之前跳回自身,完成if塊,然后出於某種原因跳回到box.fadeToggle嗎?

$(document).ready(function() {
var box     = $("#box");
var para = $("p");
var i   = 0;

para.text(i);

function toggleBox(i) {
    console.log($.now() + " 1. entering toggleBox. i=" + i);
    box.fadeToggle(2000, function() {
        console.log($.now() + " 2. after fade time. i=" + i);
        i++;
        if (i < 4) {
            para.text(i);
            toggleBox(i);
            console.log($.now() + " 3. end of if. i=" + i);
        };
    });
};

toggleBox(i);

});

控制台輸出:

69387 1.輸入toggleBox。 i = 0

71398 2.淡出時間后。 i = 0

71399 1.輸入toggleBox。 i = 1

71400 3.如果結束。 i = 1

73396 2.淡出時間后。 i = 1

73397 1.輸入toggleBox。 i = 2

73397 3.如果結束。 i = 2

75398 2.淡出時間后。 i = 2

75399 1.輸入toggleBox。 i = 3

75399 3.如果結束。 i = 3

77399 2.淡出時間后。 i = 3

box.fadeToggle(2000; function

啟動fadeToggle並注冊回調,然后返回。 這意味着toggleBox(i); 立即返回而無需更深入,因此執行以下console.log

您必須意識到這並不是真正的遞歸,因為回調將僅在動畫之后稍后才被調用,從而使當前指令流繼續進行。 任何異步操作都會有相同的現象。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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