打破jQuery循环vs原生JS for循环。哪个更好?

时间:2011-08-26 15:01:23

标签: javascript jquery

首先,如果标题问题与我要提出的问题不完全一致,请道歉。

我的问题是我想要一个循环,并且一旦条件满足,控件就会假设突破这个循环。

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

4 个答案:

答案 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()循环中放置一个断点并运行到该断点。

例如,当满足循环中的某些条件时从主机函数返回时,它将在两个循环中像这样工作:

平原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版本中,逐步调试调试器中的这个函数以查看它是否正常工作。

答案 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。此外,基于函数的循环对交互式调试更加痛苦。