首先,如果标题问题与我要提出的问题不完全一致,请道歉。
我的问题是我想要一个循环,并且一旦条件满足,控件就会假设突破这个循环。
现在,使用原生JS'for循环'并使用'return'是更好还是使用jQuery.each()并使用return false更好地打破循环?
答案 0 :(得分:3)
如果您可以使用普通的旧JavaScript循环方法,请使用它并正常分解。
除非有充分的理由使用jQuery.each()
,否则我会尽可能地将其保留在我的代码之外。这是一个非常简单的快捷方式,通过使用普通的旧JavaScript,我可以更好地控制我的代码实际执行的操作。
答案 1 :(得分:1)
我认为你的意思是break
?除了表现,使用你发现的更清楚的东西。
有些人认为for...break
(甚至是具有适当停止条件的for
的简洁性将会赢得创建匿名函数的库函数,并在代码和代码之间来回传递控制权。他们的,但他们都工作。
如果你关心性能方面(你可能不应该这样,可读性对此更为重要),那么for
也会胜出 - 为每一个人调用一个函数并不是“免费的”元素和过程返回停止条件的值。
答案 2 :(得分:1)
我更喜欢在实际使用普通的JS循环。
您可以更好地控制普通JS for循环,因为您可以从整个函数返回。在jQuery .each()
循环中,您只能使用.each()
停止return
次迭代。如果你想从主机函数return
,你需要编写额外的代码来做到这一点。在可能的情况下,我更喜欢简单的JS for循环。
简单的JS for循环在JS调试器中也更容易进入,进出。要进入.each()
循环,您必须逐步执行大量的jQuery代码,或者必须在.each()
循环中放置一个断点并运行到该断点。
例如,当满足循环中的某些条件时从主机函数返回时,它将在两个循环中像这样工作:
function findMatch(array, target) {
for (var i = 0, len = array.length; i < len; i++) {
if (array[i] === target) {
return(i);
}
}
return(-1);
}
function findMatch(array, target) {
var found = -1;
jQuery.each(array, function (index, value) {
if (value === target) {
found = index;
return(false);
}
});
return(found);
}
在普通的JS版本中,逐步调试调试器中的这个函数以查看它是否正常工作。
答案 3 :(得分:0)
我通常更喜欢$.each
,因为它看起来更清晰(没有i < a.length
并且需要这样),并且更接近语言更舒适的foreach
语法。此外,它有自己的范围,这有助于避免一些常见的闭包错误:
for(var i = 0; i < a.length; i++) {
a[i].onclick = function() {
// this will display the index of the clicked
// element. Or maybe not?
alert(i);
}
}
虽然$.each
无法跳过控制级别(打破多个循环或在循环中间从整个函数返回),但是如果需要,请使用for
。此外,基于函数的循环对交互式调试更加痛苦。