2012-04-04 13 views
2

Wenn man sich durch die Underscore.js Bibliothek zu verstehen, ich kam überversucht 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 = {}; 

warum return am Ende verwendet wird? und was prüft i in obj?

+1

Welche Funktion ist das? Vielleicht ein Link zur Quelle? –

+1

Julian Bucknall (CTO von Developer's Express) hat vor kurzem eine Reihe von Blog-Posts zum Verständnis von underscore.js veröffentlicht. Ich habe keine URL zur Hand, aber vielleicht finden Sie einen Verweis auf die Beiträge unter http://devex.com oder über ein Internet-E-Mail. Ich werde versuchen, den Link morgen zu finden und diesen Kommentar zu aktualisieren, wenn Sie bis dahin keine Antwort gefunden haben. –

+1

gefunden den Link [http://www.devexpress.com/Support/Webinars/details.xml?id=UnderscoreJS](http://www.devexpress.com/Support/Webinars/details.xml?id=UnderscoreJS) – Lordking

Antwort

3

return existiert die Funktion (mit dem angegebenen Rückgabewert, falls vorhanden). Dies wird in einem Tutorial behandelt. In einem Looping-Konstrukt hört es früh auf.

prop in obj ist ein Ausdruck, wenn sie wahr ist, und nur wenn obj (oder ein verketteten [[Prototyp]]) die Eigenschaft prop (mit beliebigen Wert einschließlich undefined) zurückkehren. Beachten Sie in diesem Fall, dass die Werte i über den Bereich [0, length) liegen. Das Ergebnis ist hier "für jeden vergebenen Index in einem Array".

iterator wertet eine Funktion und wird mit call() aufgerufen, so dass der Kontext (this eingestellt werden kann). Die spezielle Variable breaker wird zu einem speziellen Sentinel-Objekt ausgewertet. Für Objekte ist === eine "identity equal" und kein anderes neues Objekt === das Objekt, das breaker zugewiesen ist.

Kurz gesagt: es ist eine Variante von Array.forEach (ECMAScript ed. 5) oder jQuery.each (das Gebrauchsverfahren), dass iteriert über einen Sparse-Array , geht einige zusätzliche Argumente und erlaubt "early Termination".

Glückliche Kodierung.

+0

+1, um den Ausdruck tatsächlich auseinanderzunehmen. – Blender

1

Es sieht so aus, als würde der Code einige Iteratorobjekte durchlaufen und bricht ab, wenn eine breaker Variable erreicht wurde. Die return-Anweisung beendet die Funktion.

1

Beachten Sie, dass breaker nicht etwas ist, das Sie selbst verwenden können, um aus einer _.each Schleife auszubrechen; Es ist nur innerhalb des Unterstrichs selbst zugänglich und wird intern von den Methoden _.all und _.some verwendet.