0

我正在尝试制作一个插件 JSLint 证明并且正在努力处理以下错误消息:

Don't make functions within a loop.

抱怨这个片段:

 for ( i = 0; i < pops.length; i++){
    pops.eq(i)
        .addClass('reverse out '+trans)
        .hide('fast')
        .removeClass('ui-panel-active')
        .find(".ui-page-active")
           .not("div:jqmData(show='first')")
           .removeClass('ui-page-active').end()
        .find(".ui-btn-active")
           .removeClass('ui-btn-active').end()
        .find('div:jqmData(external-page="true")')
           .remove().end().end()
           .delay(350)
           // the problem
           .queue(function(next){
               $(this).removeClass('reverse out pop slide');
                 next();
                 });

            ...
        }

我知道问题出在哪里,但不知道如何使它符合 JSlint。

问题:
如何使函数脱离循环?

谢谢!

4

2 回答 2

5

我认为是时候拆分这条单线了。它长得可笑。

要将函数移出循环,请从字面上将函数移出循环:

function queue_callback(next) {
    $(this).removeClass('reverse out pop slide');
    next();
}

然后用这个替换.queue()回调中的匿名函数:

.queue(queue_callback)
于 2012-10-28T22:59:00.953 回答
3

我能想到的最简单的方法是在外面声明函数并将其作为参数传递:

var queue = function(next) {
  $(this).removeClass('reverse out pop slide');
  next();
};

...

.queue(queue)
于 2012-10-28T22:59:56.290 回答