2010-07-25 3 views
294

Ich habe eine Funktion:Früher Ausgang von der Funktion?

function myfunction() { 
    if (a == 'stop') // How can I stop the function here? 
} 

Gibt es so etwas wie exit() in JavaScript?

+3

Möchten Sie die Ausführung stoppen oder zurückgeben? –

+0

@Ken Struys was ist der Unterschied? wie ich verstehe, wenn ich zurückkomme, stoppt es die Ausführung? nicht wahr? – Simon

+3

Nun, hier ist die Sache, mit einer Rückkehr wird nur in den Kontext der aufrufenden Funktion zurückkehren. Wenn Sie die Exit-Semantik tatsächlich möchten, dass Sie die Ausführung stoppen möchten, können Sie Folgendes tun: http://vikku.info/codesnippets/javascript/forcing-javascript-to-aborent-stop-javascript-execution-at- any-time/ –

Antwort

467

Sie können einfach return verwenden.

function myfunction() { 
    if(a == 'stop') 
     return; 
} 

Dies wird einen Rückgabewert von undefined, was auch immer die Funktion senden.

var x = myfunction(); 

console.log(x); // console shows undefined 

Natürlich können Sie einen anderen Rückgabewert angeben. Welcher Wert auch immer zurückgegeben wird, wird mit dem obigen Beispiel in der Konsole protokolliert.

return false; 
return true; 
return "some string"; 
return 12345; 
+3

Ich weiß, das ist ein alter Beitrag, und das ist gängige Praxis, aber ich denke, das ist eine schlechte Lösung. Wenn die Funktion SUPPOSED ist, um einen Wert zurückzugeben, sollten Sie return verwenden. Wenn Sie einfach blind zurückkehren, könnten Sie später Probleme bekommen. Vor allem, wenn Sie Ereignisse binden, die eine Rückkehr in sie haben. Weitere Informationen finden Sie in diesem Post: http://fuelyourcoding.com/jquery-events-stop-misusing-return-false/ – dbme

+48

@dbme: Funktionen in JavaScript * always * return. Die Rückgabeanweisung ist implizit, wenn sie nicht angegeben wurde. Der Standard-Rückgabewert ist "undefiniert", und das bietet meine primäre Lösung. Der Artikel, auf den Sie verwiesen haben, spricht davon, in einem jQuery-Event-Handler "return false" auszuführen. Das ist ein ganz anderes Thema. Dies ist der richtige Weg, um eine JavaScript-Funktion zu beenden. Wenn der Aufrufer auf den zurückgegebenen Wert angewiesen ist, muss der Wert offensichtlich definiert werden. – user113716

+3

... Eine implizite Variante wäre 'if (a! = 'Stop') {/ * führe meinen Code * /}' so dass der Code nur dann läuft, wenn 'a' nicht gleich''stopp' ist, ohne zu liefern eine explizite "Rückkehr". Aber der Rückgabewert * ist identisch mit meiner Lösung *. In beiden Fällen wird 'undefined' zurückgegeben. – user113716

15

Dieses:

function myfunction() 
{ 
    if (a == 'stop') // How can I stop working of function here? 
    { 
     return; 
    } 
} 
3

, wenn Sie nach einem Skript suchen Einreichung Form zu vermeiden, wenn einige Fehler gefunden, sollte diese Methode

function verifyData(){ 
    if (document.MyForm.FormInput.value.length == "") { 
      alert("Write something!"); 
    } 
    else { 
      document.MyForm.submit(); 
    } 
} 

Änderung arbeiten die Senden-Schaltfläche Typ zu "Knopf"

<input value="Save" type="button" onClick="verifyData()"> 

hoffe diese Hilfe.

-4

Wenn Sie jQuery verwenden. Dies sollte verhindern, dass die Funktion sprudelt, so dass die Elternfunktion, die dies aufruft, ebenfalls anhalten sollte.

function myfunction(e) 
    { 
     e.stopImmediatePropagation(); 
     ................ 
    } 
+5

'stopImmediatePropagation()' ist keine jQuery-Sache, und das Stoppen der Propagierung ist nicht dasselbe Ding als Verlassen einer Funktion. –

13
function myfunction() { 
    if(a == 'stop') 
     return false; 
} 

return false; ist viel besser als nur return;

+9

Warum ist 'false' besser? Ich würde sagen, dass der Standard "undefined" im generischen Fall besser ist. So oder so, Sie sagen, es ist oft besser, einen aussagekräftigen Wert zurückzugeben. –

+0

Es hängt vom Programmierer ab und hängt vom Anwendungsfall ab. Zum Beispiel kann eine Funktion etwas validieren, wenn also die Validierung fehlschlägt, ist es sinnvoller, "false" als "undefined" zurückzugeben. –

40

Anscheinend können Sie dies tun:

function myFunction() {myFunction:{ 
    console.log('i get executed'); 
    break myFunction; 
    console.log('i do not get executed'); 
}} 

Siehe Block Bereiche durch die Verwendung eines Etiketts: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/label

I sehe noch keine Nachteile. Aber es scheint nicht üblich zu sein.

diese Antwort Abgeleitet: JavaScript equivalent of PHP’s die

+0

ist es möglich, diese Lösung mit dem Modul nodejs exports zu verwenden? Wenn ich es versuche, erhalte ich den Fehler "nicht verwendetes Etikett". exports.MyFunction = function (Daten) {myFunction: {break myFunction;}} –

6

etwas anderen Ansatz verwenden, können Sie try catch mit throw-Anweisung verwenden.

function name() { 
    try { 
     ... 

     //get out of here 
     if (a == 'stop') 
      throw "exit"; 

     ... 
    } catch (e) { 
     // TODO: handle exception 
    } 
} 
2

eine return verwendet, wird der Stopp-Funktion und Rück undefined oder der Wert, den Sie mit dem Rückkehrbefehl angeben.

function myfunction(){ 
    if(a=="stop"){ 
     //return undefined; 
     return; /** Or return "Hello" or any other value */ 
    } 
} 
+2

Was genau fügt Ihre Antwort hinzu, die in der angenommenen Antwort von vor 6 Jahren noch nicht enthalten war? – Bryan

0

exit(); kann für die nächste Validierung verwendet werden.

-7

Typ jeden beliebiger Befehl, der einen Fehler, zum Beispiel wirft:

exit 

oder

die:-) 
+0

Dies kann verhindern, dass der gesamte Code ausgeführt wird, nicht nur der Rest der Funktion. Prüfe Geige: https://jsfiddle.net/b3k0xo7n/1/ – treecon

0

ich die Dinge nicht gern beantworten, die keine wirkliche Lösung ist ...

. ..wenn ich das gleiche Problem antraf, habe ich unten die Problemumgehung gemacht:

function doThis() { 
    var err=0 
    if (cond1) { alert('ret1'); err=1; } 
    if (cond2) { alert('ret2'); err=1; } 
    if (cond3) { alert('ret3'); err=1; } 
    if (err < 1) { 
    // do the rest (or have it skipped) 
    } 
} 

Ich hoffe, es kann für jedermann nützlich sein.

Verwandte Themen