Epi*_*pik 9 javascript optimization jquery
如果我这样做有什么不同:
$queue.queue(function(next){
//...
next();
}).queue(function(next){
//...
next();
});
Run Code Online (Sandbox Code Playgroud)
与
$queue.queue(function(){
//...
$(this).dequeue();
}).queue(function(){
//...
$(this).dequeue();
});
Run Code Online (Sandbox Code Playgroud)
他们做同样的事情吗?
有什么区别,我应该使用哪些?
这很奇怪因为jQuery文档没有真正提及.next(),他们总是说要使用.dequeue()但是在我的工作场所人们使用这个.next()功能所以这让我感到很困惑.
我知道,没有区别.我不确定为什么一个人会比另一个更好,或者为什么他们都被提到,因为这让我感到困惑.
看看http://code.jquery.com/jquery-1.9.1.js,我们看到:
1915 next = function() {
jQuery.dequeue( elem, type );
};
Run Code Online (Sandbox Code Playgroud)
......在jQuery.dequeue方法中.这稍后被称为(在1936行)fn.call(elem, next, hooks).你看,这next是queue回调中的第一个参数,fn就queue在那时.
展望未来,我们看到了
1983 dequeue: function( type ) {
return this.each(function() {
jQuery.dequeue( this, type );
});
},
Run Code Online (Sandbox Code Playgroud)
这是定义的jQuery.fn,所以这是被调用的函数$(this).dequeue.但是,这完全是一回事.唯一的区别是出列的元素.在fn.dequeue它循环集合,但这只是一个元素$(this).
如果我们回头看,我们看到的elem是:
1908 dequeue: function( elem, type ) {
Run Code Online (Sandbox Code Playgroud)
......嘿,等一下..它是this(当被召唤时$(this).dequeue)!因此,您可以看到它们完全相同. $("some other collection").dequeue但是会有不同的工作方式.
通话next()可以为您节省额外的.each电话,所以我想这会更快.
顺便说一下,您不必next在回调中调用它,因为您可以将参数重命名为您想要的任何参数.
编辑:根据我与我的杰出同事@FabrícioMatté的小型讨论,实际上在next()和之间的功能上存在差异$(this).dequeue(),特别是在不使用标准fx队列时.当next创建功能,它被设置为来电$.dequeue从取得的种类queue了,但是$.fn.dequeue需要的类型作为参数.这可能更有动力坚持next(),虽然我从来没有真正看到有人使用除了标准效果队列之外的任何其他东西.