在浏览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会检查什么?
发布于 2012-04-04 11:01:34
return存在函数(具有指定的返回值,如果有)。这将在教程中介绍。在循环结构中,它“提前停止”。
prop in obj是一个表达式,当且仅当obj (或链接的[prototype])具有属性prop (具有任何值,包括undefined)时才返回true。在本例中,请注意i的值超出了[0, length)的范围。这里的结果是“对于数组中每个指定的索引”。
iterator的计算结果是一个函数,并通过call()调用,因此可以设置上下文(可以设置this)。特殊的breaker变量的计算结果为特殊的标记对象。对于对象,===是“等同的”,没有其他新对象会对分配给breaker的对象执行===操作。
简而言之:它是Array.forEach (ECMAScript ed.5)或jQuery.each (实用程序方法),它遍历稀疏数组,传递一些额外的参数,并允许“提前终止”。
祝你编码愉快。
发布于 2012-04-04 10:50:13
代码似乎循环遍历某个迭代器对象,并在到达breaker变量时中断。return语句退出函数。
发布于 2013-01-08 08:59:22
请注意,您不能使用breaker来打破_.each循环;它只能在下划线自身内部访问,并由_.all和_.some方法在内部使用。
https://stackoverflow.com/questions/10004310
复制相似问题