2015-03-25 77 views
1

出隊函數具有以下遞歸結構。我認爲嵌套的dequeue調用應該在fn之前發生,因此它會保持FIFO的順序嗎?jQuery.dequeue遞歸順序

dequeue: function(elem, type) { 
      fn.call(elem, function() {jQuery.dequeue(elem, type); 

    }) 

預先感謝您!

+0

其中的jQuery的版本是 – 2015-03-25 08:13:37

+0

@ArunPJohny 1.6.2 – 2015-03-25 08:33:25

回答

1

如果你看一下完整的代碼(如下圖),fn是在隊列列表中的第一項(因爲shift()使用fn = queue.shift()),所以你需要調用fn第一。

了我們使用pop()(這將給數組中的最後一個項目),我們將不得不調用dequeue()然後調用fn

dequeue: function(elem, type) { 
    type = type || "fx"; 

    var queue = jQuery.queue(elem, type), 
     fn = queue.shift(), 
     defer; 

    // If the fx queue is dequeued, always remove the progress sentinel 
    if (fn === "inprogress") { 
     fn = queue.shift(); 
    } 

    if (fn) { 
     // Add a progress sentinel to prevent the fx queue from being 
     // automatically dequeued 
     if (type === "fx") { 
      queue.unshift("inprogress"); 
     } 

     fn.call(elem, function() { 
      jQuery.dequeue(elem, type); 
     }); 
    } 

    if (!queue.length) { 
     jQuery.removeData(elem, type + "queue", true); 
     handleQueueMarkDefer(elem, type, "queue"); 
    } 
} 
+0

謝謝Arun抽空回答。但是fn在被調用時就像fn.call(elem,function(){jQuery.dequeue(elem,type);});這是否意味着下一次出隊應該先執行? – 2015-03-25 14:05:43

+0

'fn.call()'在調用完成後會調用'fn',第二個參數(我認爲它是一個回調函數)會被調用,它將再次調用dequeue – 2015-03-25 14:27:30