2017-06-16 3 views
0

Können Sie bitte erklären, warum die Rückkehrfunktion in der Funktion von Doctor1 könnte besser sein, dass die in der Arzt 2?Zurück Anonyme Funktion

//-----------------Doctor 1-------------------------- 
 

 
function doctor1() { 
 
    return function() { alert("How are you, today?"); }; 
 
} 
 

 
var x = doctor1(); 
 
x(); 
 

 

 
//-----------------Doctor 2-------------------------- 
 

 
function doctor2() { 
 
    return alert("How are you, today?"); 
 
} 
 

 
doctor2(); 
 

 
//-------------------------------------------

+0

Mögliches Duplikat von [var Funktionsname = Funktion() {} vs Funktion Funktionsname() {}] (https://stackoverflow.com/questions/336859/var-functionname-function-vs-function-functionname) –

+0

Was? meinst du mit _be better_? – destoryer

+0

@destoryer, ich meine, welcher ist richtig oder wenn es einen Fall gibt, wo Sie einen als den anderen verwenden möchten! – Aseel

Antwort

1

In Ihrem speziellen Fall ist es nicht wirklich ein Unterschied. Aber wenn man will Funktionen erstellen, die einigen Zustand beibehalten (dh Verschlüsse schaffen), könnte eine Funktion der Rückkehr nützlich sein:

function doctor1(num) { 
    return function() { alert("How are you, today? " + num); }; 
} 

var functions = []; 

for (var i = 0; i < 3; i++) { 
    functions.push(doctor1(i)); 
} 

// The functions "remember" the values 0, 1, and 2 
for (var i = 0; i < functions.length; i++) { 
    functions[i](); 
} 

By the way, Ihre doctor2 Funktion keine return Anweisung benötigt, weil alert doesn‘ t nichts zurückgeben.

Edit: Ich möchte klarstellen, dass die Funktion Ihrer Rückkehr nicht anonym sein muss:

function doctor1(num) { 
    return function myFunc() { alert("How are you, today? " + num); }; 
} 

die Funktion wie diese Benennung kann helfen beim Debuggen. Wenn die Funktion einen Fehler auslöst, wird der Funktionsname in der Konsole angezeigt.

+0

Vielen Dank für Ihre Hilfe. Wenn es Ihnen nichts ausmacht, warum dann, wenn ich das Funktionsarray alarmiere, die Zahl nicht durch die zugewiesene Nummer ersetzt wurde? – Aseel

+0

Wenn Sie 'alert (Funktionen)' tun, werden Sie nur den Text der Funktion sehen. Aber wenn du 'console.log (Funktionen)' machst und deine Entwicklungswerkzeuge öffnest, kannst du in jeder Funktion nachschauen und einige Browser zeigen dir die Schließungen (funktioniert für mich in Chrome). So können Sie tatsächlich die Zahl sehen, die die Funktion einschließt (wie 0, 1 oder 2). –

+0

Vielen Dank, das war informativ. – Aseel