2013-04-16 17 views
12

natknąłem się na następujący kod javascript:Co oznacza _ (nazwa_zmiennej) w 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); 
}; 

Co _ (dzieci) na myśli?

+0

Tutaj może znaleźć odpowiedź: http://stackoverflow.com/questions/4484424/underscore-prefix-for-property-and-method-names-in-javascript – showdev

+3

'_' jest identyfikatorem JavaScript, prawdopodobnie dla w tym przypadku biblioteka [podkreślenie] (http://underscorejs.org/). –

+0

@showdev: Właściwie '_()' jest wywołaniem funkcji o nazwie ... well .. '_' –

Odpowiedz

18

_ to poprawny identyfikator zmiennej w języku JavaScript i teoretycznie może odnosić się do dowolnie. Korzystanie ze składni funkcji oznacza, że ​​_ jest funkcją.

To powiedziawszy, jest powszechnie używane w bibliotece underscore.js, jednak jeśli patrzysz na minified code, prawdopodobnie używa się go jako kolejnej nazwy zmiennej jednoliterowej, aby zaoszczędzić na rozmiarze pliku.


W przykładzie dostarczonych wynika, że ​​underscore.js jest stosowany w leczeniu children jako zbiór, tak że indexOf function mogą być stosowane do kolekcji. To byłby podobny do wywoływania:

_.indexOf(children, target); 
+0

Nie patrzę na minified kod. Jeśli _ jest funkcją, która przekazuje dzieci jako jej parametr, nie rozumiem jej znaczenia, ponieważ nie ma definicji funkcji dla _. –

+0

@CharlesGao, zminimalizowana uwaga dotycząca kodu miała służyć jako ogólny komentarz, nie skierowany do konkretnej sytuacji. Przypadek ten wygląda tak, jakby kod korzystał z biblioteki podkreślników dla swoich funkcji narzędziowych, które iterują po kolekcjach. – zzzzBov

+0

Ma sens. :) –

6

szukał odpowiedzi na to i udało się znaleźć. Instrukcja _ (zmienna) zawija podkreślenie wokół zmiennej. Według this link w sekcji „obiektowe i Style funkcjonalne”,

jest równoważna

index = _.indexOf(children, target); 

Pierwszym z nich jest napisana w stylu obiektowym, który pozwala łańcuchowym funkcji. Ich przykład jest następujący:

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

Każda z tych funkcji zwraca funkcję podkreślenia słowa owijania, co pozwala na łańcuchu manipulacji tekstu zmiennych.

Podkreślenie changelog:

0.4.0 - 7 listopada 2009: funkcje Wszystko podkreślenia można teraz nazywa się w stylu obiektowego, tak: _ ([1, 2, 3]) mapy. (...) ;. Oryginalna łatka dostarczona przez Marc-André Cournoyer. Zawinięte obiekty można połączyć za pomocą wielu wywołań metod. Została dodana metoda funkcji, zapewniająca uporządkowaną listę wszystkich funkcji w podkreśleniu.

+0

[Dokumentacja dla _ (.) Dla _lodash_ 4.17.4] (https://lodash.com/docs/4.17.4 # lodash), który najwyraźniej łączy _lodash_ i _underscore_, –

+0

i ładne wyjaśnienie o "niejawny łańcuchowych" (w przeciwieństwie do "wyraźnego łańcuchowym"): [niejawny Chaining Funkcja w Lodash] (https://blog.mariusschulz.com/ 2015/05/14/implicit-function-chains-in-lodash). Dat Syntactic Sugar! –