2015-05-12 59 views
0

我正要通過carasoul.js的代碼和整個下面一行代碼::爲什麼在'bsTransitionend'中'setTimeout'?

setTimeout(function() { 
      that.$element.trigger(slidEvent) 
      }, 0) 

傳來好它很簡單的東西上面一行代碼是幹什麼的,下面的一行代碼::

that.$element.trigger(slidEvent) 

在0間隔執行的,現在我的問題是,什麼是這段代碼的情況下,如果所有的作者想要的是立即運行功能/執行的代碼行,他可以在沒有settimeout的情況下完成了,就像在這種情況下一樣,

,而不是::

setTimeout(function() { 
      that.$element.trigger(slidEvent) 
      }, 0) 

筆者可能剛纔寫的代碼::

that.$element.trigger(slidEvent) 

那麼爲什麼在設定的時間出來,什麼是它的上下文以下幾行?下面

是整個代碼段,使得它更有意義::

$active 
     .one('bsTransitionEnd', function() { 

      $next.removeClass([type, direction].join(' ')).addClass('active') 
      $active.removeClass(['active', direction].join(' ')) 
      that.sliding = false 

      setTimeout(function() { 
      that.$element.trigger(slidEvent) 
      }, 0) 
     }) 

整個代碼也可以在GIT中here.(線156)中發現。

重複我的問題,爲什麼setTimeout使用時,它似乎什麼都不做?

回答

1

這樣做是爲了在下一個循環中調用該函數。 我使用它時,我需要等待DOM刷新或在此週期內分派一些其他事件。

您正在將函數添加到setTimeout隊列中,並在下一個週期中檢查setTimeout隊列時,您的方法因爲時間(0)被傳遞而被執行。

可能重複:Why is setTimeout(fn, 0) sometimes useful?

+0

但後來爲什麼'0'的間隔,使是絕對沒有意義?我的意思是'0'的區間。 –

+0

,因爲您在setTimeout隊列中設置了函數,並在下一個循環中setTimeout隊列被選中時執行了您的方法 – SharpEdge

相關問題