跳出jQuery循环vs原生JS for循环.哪个更好

Breaking out of jQuery loop vs native JS for loop. Which is better?

本文关键字:循环 for 更好 原生 jQuery vs 跳出 JS      更新时间:2023-09-26

首先,如果标题问题与我要问的问题不完全匹配,请道歉。

我的问题是,我想有一个循环,控制应该打破这个循环,一旦条件得到满足。

现在,是更好地使用原生JS 'for循环'和使用'return',还是更好地使用jQuery.each()和使用return false,跳出循环?

如果您可以使用普通的旧JavaScript方法在集合上循环,请使用它并正常跳出。

除非有很好的理由使用jQuery.each(),否则我尽量使它远离我的代码。这是一个非常简单的快捷方式,通过使用普通的JavaScript,我可以保留对代码实际操作的更多控制。

我想你是指break ?抛开性能不谈,使用任何你觉得更清晰的东西。

有些人会认为for...break的简洁性(甚至for具有适当的停止条件)会胜过创建匿名函数并在您的代码和它们的代码之间来回传递控制的库函数,但是它们都可以工作。

如果您确实关心性能方面(您可能不应该关心,可读性在这方面更重要),那么for也会胜出——为每个元素调用函数并处理返回值以停止条件并不是"免费的"。

在实际情况下,我更喜欢使用普通的JS循环。

你对普通JS for循环有更多的控制,因为在那里你可以从整个函数返回。在jQuery .each()循环中,您只能使用return停止.each()迭代。如果希望从宿主函数中调用return,则需要编写额外的代码。如果可能的话,我更喜欢纯JS的for循环。

在JS调试器中,普通的JS for循环也更容易进入、通过和退出。要进入.each()循环,您必须执行大量的jQuery代码,或者您必须在.each()循环中放置一个断点并运行到该断点。

例如,要在满足循环中的某些条件时从宿主函数返回,在两个循环中可以这样工作:

普通JS

function findMatch(array, target) {
    for (var i = 0, len = array.length; i < len; i++) {
        if (array[i] === target) {
            return(i);
        }
    }
    return(-1);
}
使用jQuery.each ()

function findMatch(array, target) {
    var found = -1;
    jQuery.each(array, function (index, value) {
        if (value === target) {
            found = index;
            return(false);
        }
    });
    return(found);
}

在调试器中遍历这个函数,看看它为什么工作或不工作,在纯JS版本中要容易得多。

我通常更喜欢$.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。此外,基于函数的循环的交互式调试更加痛苦。