Adam jest poprawny; obie funkcje zwracają wartość undefined, a każda z nich jest absolutnie w porządku, jeśli nie zależy Ci na zwracanej wartości (lub chcesz, aby wartość była niezdefiniowana). Jednak w bardziej złożonych programach często lepiej jest zwracać się z funkcji, zwłaszcza, że programy JavaScript mają często złożone mechanizmy oddzwaniania. Na przykład w tym kawałku kodu (tylko trochę bardziej złożony niż twój) Wierzę, że instrukcja return naprawdę pomaga wyjaśnić kod:
function someAsyncFunction(someVar, callback) {
// do something, and then...
callback(someVar);
// will return undefined
return;
}
function c(){
var someState = null;
if (some condition) {
return someAsyncFunction(some variable, function() {
return "from the callback but not the function";
});
// we've passed the thread of execution to someAsyncFunction
// and explicitly returned from function c. If this line
// contained code, it would not be executed.
} else if (some other condition) {
someState = "some other condition satisfied";
} else {
someState = "no condition satisfied";
}
// Note that if you didn't return explicitly after calling
// someAsyncFunction you would end up calling doSomethingWith(null)
// here. There are obviously ways you could avoid this problem by
// structuring your code differently, but explicit returns really help
// avoid silly mistakes like this which can creep into complex programs.
doSomethingWith(someState);
return;
}
// Note that we don't care about the return value.
c();
Dobrą odpowiedź na to pytanie powinna zawierać link do odpowiedniej części ECMA spec. – georg
return; w zasadzie oznacza tutaj zakończenie funkcji. Więc jeśli masz go jako ostatnią część swojej funkcji, nie robi nic użytecznego. – gintas
12.9 w specyfikacji, dla zainteresowanych. – davin