2012-02-24 26 views
6

Say masz 2 identyczne funkcje, które nie zwracają wartośćCzy istnieje różnica między funkcją zi bez instrukcji return?

function a() { 
    // do some interesting things 
} 

function b() { 
    // do the same interesting things 
    return; 
} 

Funkcja b jest oczywiście bardziej rozwlekły, ale jest jakaś różnica między tymi funkcjonalna?

+2

Dobrą odpowiedź na to pytanie powinna zawierać link do odpowiedniej części ECMA spec. – georg

+2

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

+1

12.9 w specyfikacji, dla zainteresowanych. – davin

Odpowiedz

10

Nie ma istotnej różnicy; oba zwrócą undefined.

Funkcje bez instrukcji return zwrócą undefined, podobnie jak funkcje z pustą instrukcją return.


Aby potwierdzić to dla siebie, można uruchomić ten kod - FIDDLE:

​function a() { 
} 

function b() { 
    return; 
} 

var aResult = a(); 
var bResult = b(); 

alert(aResult === bResult); //alerts true 
1

Generalnie wracają wartość. Tak na przykład,

function b() { 
    return 'hello'; 
} 

a = b(); 

console.log(a); 

wyjście będzie „cześć” do konsoli.

3

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(); 
+3

Całkowicie subiektywne, ale całkowicie się nie zgadzam. Nie sądzę, żeby łatwiej było odczytać kod. Wręcz przeciwnie, jest to niepotrzebne, więc służy tylko do zagracania. Mój 2c. Przypuszczam, że każdy do siebie. – davin

Powiązane problemy