Używam Netbeans do dodawania profesjonalnych komentarzy do każdej funkcji, piszę. Więc zaczynam każdy z nich, /**
a następnie naciskam, Enter
aby Netbeans wypełnił domyślny schemat komentarzy dla następującej funkcji.
Do tej pory używałem tego tylko dla języka PHP iw tym przypadku Netbeans zawsze dodawał @returns {type}
część tylko w schemacie komentarzy, jeśli śledzenie funkcji PHP rzeczywiście zawierało return
instrukcję. W tzw. „Procedurach” (funkcjach, które nie zwracają żadnej wartości) brakowało tej części.
Dzisiaj wypróbowałem to samo dla funkcji Javascript i Netbeans dodał @returns {undefined}
część do schematu komentarzy, mimo że następująca funkcja nic nie zwraca.
To mnie zdezorientowało. Czy Netbeans sugeruje w ten sposób, że każda funkcja Javascript musi coś zwracać? Co powinienem zrobić? Zignorować (lub usunąć) tę część schematu komentarzy lub postępować zgodnie z sugestią (jeśli to w ogóle jest sugestia) i dodać return false;
na końcu taką funkcję, chociaż jest dla mnie bezużyteczna?
źródło
undefined
. W wielu językach zwracany jest wynik ostatniej instrukcji (bardziej przydatne, IMO). Nazywa się to niejawnymi zwrotami .Odpowiedzi:
Krótka odpowiedź brzmi: nie.
rzeczywistym odpowiedź brzmi tak: silnik JS musi zostać poinformowany, że niektóre funkcje zakończył swoją działalność, która jest wykonywana przez funkcję powracającego coś. Dlatego też zamiast „zakończona” mówi się, że funkcja „zwróciła” .
Funkcja, której brakuje wyraźnej instrukcji return
undefined
, zwróci , tak jak funkcja C (++), która nie ma wartości zwracanej, mówi się (i jej podpis odzwierciedla to), aby zwrócićvoid
:Ponadto, w JS, jak w większości innych języków, możesz po prostu zignorować wartość zwracaną przez funkcję, co robi bardzo dużo:
Na bardzo niskim poziomie zwrot przekłada się na pewien rodzaj skoku. Gdyby funkcja naprawdę nic nie zwracała, nie byłoby sposobu, aby wiedzieć, co i kiedy wywołać następną funkcję lub wywołać procedury obsługi zdarzeń i tym podobne.
Podsumowując: nie, funkcja JS nie musi niczego zwracać, jeśli idzie o twój kod. Ale jeśli chodzi o silniki JS: funkcja zawsze zwraca coś, czy to jawnie poprzez plik
return
instrukcji, czy niejawnie. Jeśli funkcja zwraca niejawnie, jej wartość zwracana zawsze będzie niezdefiniowana.źródło
void
, zwraca nic, ale jego podpis odzwierciedla to przezvoid
typ zwracany.return;
jest prawdopodobnie przydatny tylko wtedy, gdy musisz wrócić wcześniej. pisaniereturn undefined;
może dawać różne wyniki, jeśli będzieundefined
miało inną wartość. Większość (jeśli nie wszystkie) przeglądarek wyświetli błąd przy próbie ponownego przypisania undefined, ale teoretycznie jest to możliwe na przykładzie z node.jsvoid
innych języków (takich jak C), w których możesz mieć takie funkcje, jakvoid do_someting(int *arg)
, ale nie możesz mieć zmiennej z typemvoid
. W Cvoid
nie jest to typ, więc te funkcje nic nie zwracają , po prostu skacząNie, zwrot nie jest konieczny.
Ale żaden powrót nie zwraca pliku
undefined
źródło
Nie, nie robią. To prawda, że w szczegółach specyfikacji wszystkie są nieco inne:
... ale wynik nazywając każdy z nich jest taka sama:
undefined
. A więc w kategoriach pragmatycznych:return
, możesz po prostu pozwolić, aby wykonanie kodu „wypadło z końca” funkcjiundefined
, po prostu piszeszreturn;
return;
, czy zakończyło sięreturn undefined;
; wszystkie wyglądają dokładnie tak samo jak Twój kod wywoławczyDo specyfikacji: W szczególności, gdy wykonanie funkcji kończy się, w specyfikacji jest to „normalne” zakończenie; ale
return;
ireturn value;
oba są uzupełnieniami „zwracanymi” ze skojarzoną wartością (undefined
), która jest (bardzo nieznacznie) inna. Ale różnica jest eliminowana przez semantykę wywoływania funkcji , która mówi:Więc nie ma różnicy, którą można zaobserwować w kodzie.
źródło
Nie, nie musisz zwracać czegoś dla każdej funkcji. Jest to opcjonalne i zależne od tego, jak piszesz logikę kodu.
źródło