2013-04-16 12 views
12

Ich kam in den folgenden JavaScript-Code:Was bedeutet _ (variable_name) in Javascript?

this.removeEdge = function(source, target) { 
    if(!_states[source]) return; 

    var children = _states[source].children, 
     index = _(children).indexOf(target); 
    if(index !== -1) children.splice(index, 1); 
}; 

Was bedeutet _ (Kinder) bedeuten?

+0

Vielleicht finden Sie Ihre Antwort hier: http://StackOverflow.com/Questions/4484424/underscore-prefix-for-property-and-method-names-in-Javascript – showdev

+3

Die _ _ ist eine JavaScript-Kennung, wahrscheinlich für die Bibliothek [Unterstrich] (http://underscorejs.org/) in diesem Fall. –

+0

@showdev: Eigentlich '_()' ist ein Aufruf einer Funktion namens .. gut .. '_' –

Antwort

18

_ ist ein gültiger Variablenbezeichner in JavaScript und könnte sich theoretisch auf alles beziehen. Die Verwendung von _(...) mit Funktionssyntax bedeutet, dass _ eine Funktion ist.

Das heißt, es wird häufig von der underscore.js-Bibliothek verwendet, aber wenn Sie bei minimiertem Code suchen, wird es möglicherweise als ein weiterer Einzel-Zeichen-Variablenname verwendet, um Dateigröße zu speichern.


In Ihrem Beispiel vorgesehen ist, scheint es, dass Underscore.js verwendet wird children als eine Sammlung zu behandeln, so dass die indexOf function kann auf die Sammlung angewendet werden. Dies wäre ähnlich wie beim Anrufen:

_.indexOf(children, target); 
+0

Ich schaue nicht auf minimierten Code. Wenn _ eine Funktion ist, die Kinder als Parameter übergibt, bekomme ich ihre Bedeutung nicht, weil es für _ keine Funktionsdefinition gibt. –

+0

@CharlesGao, die Bemerkung zum verkleinerten Code war als allgemeiner Kommentar gedacht, der nicht auf Ihre spezielle Situation ausgerichtet war. Dieser Fall sieht so aus, als ob der Code die Unterstrichbibliothek für seine Dienstprogrammfunktionen verwendet, die über Sammlungen iterieren. – zzzzBov

+0

Take macht Sinn. :) –

6

Kam auf der Suche nach einer Antwort auf diese und es geschafft, eine zu finden. Die Anweisung _ (Variable) umschließt die Variable mit einem Unterstrich. Nach this link in der „objektorientiert und Functional Stile“ Abschnitt,

entspricht

index = _.indexOf(children, target); 

Die erste in der objektorientierten Art geschrieben ist, die Verkettung von Funktionen ermöglicht. Ihr Beispiel ist wie folgt:

_(lyrics).chain() 
    .map(function(line) { return line.words.split(' '); }) 
    .flatten() 
    .reduce({}, function(counts, word) { 
    counts[word] = (counts[word] || 0) + 1; 

Jede dieser Funktionen gibt die Unterstreichungsfunktion Text Einwickeln, so dass gekettet Manipulation der variablen Texten.

Unders Changelog:

0.4.0 - 7. November 2009: All Unders Funktionen können nun in einem objektorientierten Stil genannt werden, etwa so: _ ([1, 2, 3]) Karte. (...) ;. Original-Patch von Marc-André Cournoyer. Wrapped-Objekte können durch mehrere Methodenaufrufe verkettet werden. Eine Funktionsmethode wurde hinzugefügt, die eine sortierte Liste aller Funktionen in Underscore bietet.

+0

[Dokumentation für _ (.) Für _lodash_ 4.17.4] (https://lodash.com/docs/4.17.4 # lodash), die _lodash_ und _underscore_, –

+0

scheinbar verschmilzt Und eine nette Erklärung über "implizite Verkettung" (im Gegensatz zu "expliziten Verkettung"): [Implizite Funktion Verkettung in Lodash] (https://blog.mariusschulz.com/ 2015/05/14/implizite-funktionsketten-in-lodash). Dat Syntaktischer Zucker! –