2012-04-04 89 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方法內部使用。