为什么“回归”跳过$ .each()中的迭代?

时间:2013-10-02 15:24:29

标签: jquery

MDN on the return statement:

  

要返回的表达式。如果省略,则返回undefined。

jQuery docs on $.each

  

返回非false与for循环中的continue语句相同;它将立即跳到下一次迭代。

由于undefined评估为false,为什么下面会跳过迭代?

$.each([1,2,3], function(k, v){
    if(v > 1)
        return;
    console.log(v); //1
});

Fiddle

2 个答案:

答案 0 :(得分:6)

没有跳过任何迭代。如果值大于1,则仅输出该值。 23都大于1,因此不会记录它们的值,因此您看不到数组中这些值的输出。

答案 1 :(得分:3)

因为这就是.each函数的设计目标。它测试严格false的相等性。来自source code

    for (; i < length; i++) {
        value = callback.apply(obj[i], args);
        if (value === false) { 
            break;
        }
    }

正如文档所说:如果return具有任何其他值,则回调函数将停止返回的位置。如果你return false - 而且只有false - 它会中止整个事情。