Używam biblioteki innej firmy, która ma funkcję, która przyjmuje funkcje jako argumenty. Wykonuję pewne kontrole warunkowe, aby zdecydować, czy dodać określoną funkcję jako parametr, aw niektórych przypadkach nie chcę udostępniać funkcji. Podanie wartości null w takich przypadkach powoduje zgłoszenie błędu.
Znalazłem ten kod, który działa, ale nie do końca rozumiem, co się dzieje.
compose(__DEV__ ? devTools() : f => f)
Czy jest f => f
odpowiednikiem () => {}
pustej funkcji anonimowej?
javascript
lambda
ecmascript-6
SomethingOn
źródło
źródło
f
, według MDNOdpowiedzi:
f => f
jest podobne dofunction(f){ return f; }
Tak blisko, ale nie do końca to, czego się spodziewałeś.
* - jak wskazano w komentarzach, istnieją subtelne różnice, ale ze względu na Twoje pytanie nie sądzę, aby były one szczególnie istotne. Są bardzo istotne w innych sytuacjach.
źródło
f => f
function(f) { return f; }
new (f => f)
rzuca, ma innytoString
iz jakiegoś powodu nie mogę całkiem grokować(f => f).arguments
rzuca w Chrome, ale nie FF lub Edge.this
jest również inna. (chociaż różnica może nie być zauważalna, jeślithis
nie pojawia się w treści funkcji ... nie jestem pewien)f => f
jest funkcją tożsamości . Po prostu zwraca argument, który został przekazany.Ta funkcja jest często używana jako wartość domyślna dla procesów transformacji, ponieważ nie wykonuje żadnej transformacji.
Nie. Pusta funkcja nic nie zwraca. Funkcja tożsamości zwraca przekazany argument.
źródło
Jeśli chcesz wiedzieć, co
f => f
oznacza, lewa strona to parametr, a prawa strona to zwracana wartość. Na przykładf => f*2
, jest równoważne z:Kod, który opisujesz, zwraca wszystko, co zostało mu dostarczone jako dane wejściowe.
https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Functions/Arrow_functions
źródło
Inni już wspomnieli, co to
f => f
robi, więc nie zamierzam się w to zagłębiać. Wyjaśnię tylko pozostałą część funkcji, ponieważ międzyf => f
i jest pewna różnica__DEV__ ? devTools() : f => f
Operator trójargumentowy sprawdza, czy
__DEV__
jest to prawdziwa wartość, a jeśli tak, zwraca funkcjędevTools()
. w przeciwnym razie zwraca funkcję tożsamości,f => f
która nic nie robi. Mówiąc inaczej: ten kod włącza niektóre funkcje w trybie programistycznym. Bez pozostałego kodu trudno powiedzieć, co dodaje ten tryb, ale prawdopodobnie umożliwi on dodatkowe informacje o rejestrowaniu i mniej zaciemniania.źródło
__DEV__ ? devTools() : f => f
niczego nie przypisujef
. Czy pominąłeś coś z przykładu kodu?Zawsze, gdy masz podobny dylemat, możesz skorzystać z Babel, aby uzyskać odpowiedź.
Wróciło tak:
BTW, => użyłeś funkcji ES6 zwanej wyrażeniem strzałki . Inny wyraz zainteresowania
przekształciłby się w:
Ponieważ wyrażenia funkcji strzałkowych są zawsze anonimowe , ma sens, jeśli dodasz nazwę do funkcji:
konwertowałoby się na
źródło