试图理解underscore.js

时间:2012-04-04 02:47:47

标签: javascript return underscore.js

当浏览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检查什么?

3 个答案:

答案 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方法在内部使用。