2013-10-02 21 views
2

MDN on the return statement:

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

jQuery docs on $.each

返回非假的是一样的for循环continue语句;它会立即跳到下一个迭代。

由于undefined的计算结果为false,为什么迭代在以下跳过?

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

Fiddle

+0

在我的控制台输出显示'1'。如果这不符合您的预期(您),您希望显示什么? – Styxxy

+1

你的问题可以通过像'if(v <2)' - [fiddle](http://jsfiddle.net/mblase75/XYzd9/1/) – Blazemonger

回答

3

因为这就是.each函数的设计目的。它测试严格等于false。从source code

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

由于文档说:如果你return与任何其他数值,回调函数会简单地停在你回来。如果你return false - 只有false - 它会中止整个事情。

+0

这就是我想知道的。我会说“非错误”一词在文档中有点误导。谢谢 – Johan

+0

[bug reporting site](http://bugs.jquery.com/)说:“jQuery Core API文档问题:文档问题应该报告给[api.jquery.com GitHub repository](http:/ /github.com/jquery/api.jquery.com/issues)祝你好运! – Blazemonger

6

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

+0

这样的东西来更好地展现出来。如果没有迭代被跳过,为什么这个日志'1'而不是'3'? http://jsfiddle.net/XYzd9/2/ – Johan

+0

@Johan因为'count ++'只在第一种情况下达到;在另外两次迭代中,函数在到达之前终止。如果你将'count ++'移动到函数的* top *,你会看到'3':http://jsfiddle.net/XYzd9/4/。 – apsillers

+1

@Johan [这个小提琴](http://jsfiddle.net/XYzd9/3/)带有更多的控制台输出可能会让事情变得更有意义。 – ajp15243

相关问题