2012-04-04 15 views
2

underscore.js理解しようと、私はなぜreturnが最後に使用されている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 = {}; 

渡って来ましたの? i in objは何を確認しますか?

+1

どの機能がありますか?おそらくソースへのリンク? –

+1

Julian Bucknall(Developer's ExpressのCTO)は最近、underscore.jsの理解に関する一連のブログ記事を実行しました。私は便利なURLはありませんが、http://devex.comやインターネットeearchで投稿への参照を見つけることができます。私は明日のリンクを見つけようとし、あなたがそれまでに答えを見つけていないなら、このコメントを更新します。 –

+1

のリンクが見つかりました[http://www.devexpress.com/Support/Webinars/details.xml?id=UnderscoreJS](http://www.devexpress.com/Support/Webinars/details.xml?id=UnderscoreJS) – Lordking

答えて

3

returnが存在します(指定されている場合は、指定された戻り値を持ちます)。これについては、チュートリアルで説明します。ループ構造では、「早期に停止する」。

prop in objは場合にのみobj(又は連鎖[[プロトタイプ]])がtrueを返すであろう表現である(undefined含む任意値で)プロパティpropを有しています。この場合、iの値は[0, length)の範囲を超えています。ここでの結果は、それぞれ "に割り当てられた配列のインデックス"です。

iteratorcall()で呼び出されるため、コンテキスト(thisを設定できます)。特別なbreaker変数は特別なセンチネルオブジェクトに評価されます。オブジェクトの場合、===は "同一性同一"であり、他の新しいオブジェクトは===breakerに割り当てられません。要するに

:(ECMAScriptの編5)がArray.forEachの変異体であるか、またはjQuery.each(ユーティリティメソッド)スパースアレイを反復処理は、いくつかの追加の引数を渡し、「早期終了」を可能にすること。

ハッピーコーディング。

+0

+1実際には式を分けています。 – Blender

1

breaker変数に達すると、コードがいくつかのイテレータオブジェクトをループし、ブレークするようです。 returnステートメントは、この関数を終了します。

1

breakerは、_.eachループから抜け出すために自分で使用できるものではありません。それはアンダースコア自体の中でしかアクセスできず、_.all_.someメソッドで内部的に使用されています。

関連する問題