2012-04-04 79 views
2

当通过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 = {}; 

为什么在最后使用returni in obj检查什么?

+1

什么功能是吗?也许是来源的链接? – 2012-04-04 02:52:10

+1

Julian Bucknall(Developer's Express的首席技术官)最近刚刚发表了一系列关于理解underscore.js的博客文章。我没有方便的URL,但也许你可以在http://devex.com或者通过互联网发现一个参考文章。我会尽力找到明天的链接,如果您当时还没有找到答案,请更新此评论。 – 2012-04-04 02:54:48

+1

发现的链路http://www.devexpress.com/Support/Webinars/details.xml?id=UnderscoreJS](http://www.devexpress.com/Support/Webinars/details.xml?id=UnderscoreJS) – Lordking 2012-04-04 08:07:51

回答

3

return存在功能(与指定的返回值,如果有的话)。这将在教程中介绍。在循环构造中,它“早日停止”。

prop in obj是将返回true当且仅当obj(或链式[[原型]])具有这样的特性prop(具有任何值,包括undefined)的表达式。在这种情况下,请注意i的值超出范围[0, length)。这里的结果是“对于数组中的每个指定的索引”。

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

简而言之:它是Array.forEach(ECMAScript的编5)或jQuery.each(效用方法)在稀疏阵列迭代,通过一些额外的参数,并允许“提前终止”的变体。

快乐编码。

+0

+1,用于实际分开表达。 – Blender 2012-04-04 05:34:49

1

好像当breaker变量已经达到该代码回路对一些iterator对象和休息。 return语句退出该函数。

1

注意breaker是不是你可以使用自己跳出_.each循环;它只能在下划线内部访问,并在_.all_.some方法内部使用。