Javascript jquery惯用的循环早期返回
我发现自己曾在多个场合写过这篇文章:Javascript jquery惯用的循环早期返回,javascript,jquery,coffeescript,scope,return,Javascript,Jquery,Coffeescript,Scope,Return,我发现自己曾在多个场合写过这篇文章: { someJQueryCallback: -> keepGoing = true $(someSelector).each -> unless someCondition($(@)) keepGoing = false return false return false unless keepGoing moreStuff() } 当然,第一次,我犯了每个人都犯的新手
{ someJQueryCallback: ->
keepGoing = true
$(someSelector).each ->
unless someCondition($(@))
keepGoing = false
return false
return false unless keepGoing
moreStuff()
}
当然,第一次,我犯了每个人都犯的新手错误:
{ someJQueryCallback: ->
$(someSelector).each -> return false unless someCondition($(@))
moreStuff()
}
啊,函数的漂亮语法的危险。作为新手,我忘记了在这个范围内,
return
将从each
退出,而不是从someJQueryCallback
退出。但实际上,即使我现在“开悟了”,这仍然是我想要写的代码。我想以某种方式指定“在从someJQueryCallback
返回之前弹出堆栈”。初始化、设置并检查bool
标志很烦人。它增加了粗糙度。有没有一种惯用的方法可以通过这种方式返回调用堆栈的更高层?我不使用coffeescript,所以这可能并不完美,但希望它能给你一个想法:
{ someJQueryCallback: ->
try
$(someSelector).each ->
throw new Error("STOP!") unless someCondition($(@))
moreStuff()
catch error
return false;
}
可能的重复在本例中,我在任意长度的集合上使用JQuery循环操作,不应该像在可能的重复中那样展开为一系列if语句。这里有一个更好的重复,但我现在更改结束投票指向它为时已晚: