为什么' setTimeout'在' bsTransitionend'?

时间:2015-05-12 10:02:01

标签: javascript jquery

我刚刚浏览了carasoul.js的代码并遇到了以下代码行::

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 个答案:

答案 0 :(得分:1)

这样做是为了在下一个周期调用该函数。 当我需要等待DOM刷新或在此循环中调度其他事件时,我会使用它。

您正在setTimeout队列中添加您的函数,并在检查setTimeout队列时在下一个循环中执行您的方法,因为时间(0)已通过。

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