2013-10-07 31 views
1

我期望下面的代碼運行如下: 1)遍歷for循環直到完成。 2)執行回調函數jQuery中的意外回調行爲

而是在每次迭代後執行回調函數。這是範圍問題嗎?我誤解了回調的控制流程嗎?

function flipPages(direction,n,duration,callback){ 
    for(i=0;i<n;i++){ 
     setTimeout(function() { $('#flipbook').turn(direction);}, ((i+1) * duration)); 
    } 
    callback; 
} 

flipPages("next",4,1000,flipPages("previous",4,2000)); 
+3

在將參數作爲回調傳遞之前,您無法將參數傳遞給回調。你正在做的是立即執行「上一步」,然後執行「下一步」。此外,你從來沒有執行'回調',你缺少'()' –

+2

你誤解了setTimeout我認爲...流程可能如下:1)循環遍歷,啓動超時2)啓動回調3)啓動所有的方法調用現在超時結束 –

+0

你應該嘗試這一點,正如@KevinB flipPages(「next」,4,1000,function(){flipPages(「previous」,4,2000)})指出的那樣。 –

回答

1

除了所有這些相關意見,我想你想要做這樣的事情:

function flipPages(direction, n, duration){ 
    for(var i = 0, l = n; i < n; i++){ 
     setTimeout(function() { 
      $('#flipbook').turn(direction); 
      if (!(--n)) { 
       flipPages({ 
        // direction switch 
        next: "previous", 
        previous: "next" 
       }[direction], n, duration); 
      } 
     }, ((i + 1) * duration)); 
    } 
} 

flipPages("next", 4, 1000); 

更新時間:無需使用回調,直接使用flipPages