2

在浏览 underscore.js 库时,我遇到了

for (var i = 0, l = obj.length; i < l; i++) {
    if (i in obj && iterator.call(context, obj[i], i, obj) === breaker) return;
}

// Establish the object that gets returned to break out of a loop iteration.
breaker = {};

为什么return用在最后?检查什么i in obj

4

3 回答 3

3

return存在函数(具有指定的返回值,如果有的话)。这将在教程中介绍。在循环结构中,它“提前停止”。

prop in objobj是一个表达式,当且仅当(或链式 [[prototype]])具有属性prop(具有任何值,包括)时才会返回 true undefined。在这种情况下,请注意 的值i超出范围[0, length)。这里的结果是“对于数组中每个分配的索引”。

iterator评估为一个函数并被调用,call()因此上下文(this可以设置)。特殊breaker变量计算为特殊的哨兵对象。对于对象,===是“身份相等”,并且没有其他新对象将===对象分配给breaker.

简而言之:它是Array.forEach(ECMAScript ed. 5)或jQuery.each(实用程序方法)的变体,它遍历稀疏数组,传递一些额外的参数并允许“提前终止”。

快乐编码。

于 2012-04-04T03:01:33.547 回答
1

似乎代码在某个迭代器对象上循环并breaker在到达变量时中断。该return语句退出函数。

于 2012-04-04T02:50:12.577 回答
1

请注意,这breaker不是您可以用来跳出_.each循环的东西。它只能在下划线内部访问,并由_.alland_.some方法在内部使用。

于 2013-01-08T00:59:21.523 回答