当浏览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
检查什么?
答案 0 :(得分:3)
return
存在该函数(具有指定的返回值,如果有的话)。这将在教程中介绍。在循环结构中,它“提前停止”。
prop in obj
是一个表达式,当且仅当obj
(或链式[[prototype]])具有属性prop
( any value,包括undefined
)。在这种情况下,请注意i
的值超出范围[0, length)
。这里的结果是“对于数组中的每个分配的索引”。
iterator
计算函数并使用call()
调用,以便可以设置上下文(this
)。特殊breaker
变量求值为特殊的sentinel对象。对于对象,===
是“身份相等”,并且没有其他新对象将===
分配给breaker
的对象。
简而言之:它是Array.forEach
(ECMAScript编辑5)或jQuery.each
(实用工具方法)的变体,它遍历稀疏数组,传递一些额外的参数并允许“提前终止”。
快乐的编码。
答案 1 :(得分:1)
似乎代码循环遍历某个迭代器对象,并在达到breaker
变量时中断。 return
语句退出函数。
答案 2 :(得分:1)
请注意,breaker
不是您可以自己用来打破_.each
循环的东西;它只能在下划线内部访问,并由_.all
和_.some
方法在内部使用。