Vroegtijdige beëindiging van functie?

Ik heb een functie:

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

Is er zoiets als exit()in JavaScript?


Antwoord 1, autoriteit 100%

Je kunt gewoon returngebruiken.

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

Dit zal een retourwaarde van undefinedsturen naar wat de functie ook heet.

var x = myfunction();
console.log( x );  // console shows undefined

Natuurlijk kunt u een andere retourwaarde opgeven. Welke waarde ook wordt geretourneerd, wordt in de console vastgelegd met behulp van het bovenstaande voorbeeld.

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

Antwoord 2, autoriteit 7%

Blijkbaar kunt u dit doen:

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

Bekijk blokbereiken door het gebruik van een label: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/label

Ik zie nog geen nadelen. Maar het lijkt niet gebruikelijk.

Dit antwoord afgeleid: JavaScript-equivalent van PHP’s die


Antwoord 3, autoriteit 3%

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

return false;is veel beter dan alleen return;


Antwoord 4, autoriteit 2%

Dit:

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

Antwoord 5, autoriteit 2%

Met een iets andere benadering kun je try catchgebruiken, met throw-statement.

function name() {
    try {
        ...
        //get out of here
        if (a == 'stop')
            throw "exit";
        ...
    } catch (e) {
        // TODO: handle exception
    }
}

Antwoord 6

Als u op zoek bent naar een script om te voorkomen dat u het formulier indient wanneer er fouten worden gevonden, zou deze methode moeten werken

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

verander het type Knop verzendenin “knop”

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

hoop dat dit helpt.


Antwoord 7

Het gebruik van een returnstopt de functie en retourneert undefined, of de waarde die u opgeeft met het return-commando.

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

Antwoord 8

Ik denk dat het gooien van een nieuwe fout een goede benadering is om de uitvoering te stoppen in plaats van alleen maar terug te geven of false te retourneren. Voor bijv. Ik valideer een aantal bestanden waarvan ik maximaal vijf bestanden toesta om in een aparte functie te uploaden.

validateMaxNumber: function(length) {
   if (5 >= length) {
        // Continue execution
   }
   // Flash error message and stop execution
   // Can't stop execution by return or return false statement; 
   let message = "No more than " + this.maxNumber + " File is allowed";
   throw new Error(message);
}

Maar ik noem deze functie vanuit de hoofdstroomfunctie als

 handleFilesUpload() {
      let files =  document.getElementById("myFile").files;
      this.validateMaxNumber(files.length);
}

In het bovenstaande voorbeeld kan ik de uitvoering niet stoppen tenzij ik een nieuwe Error gooi. Gewoon teruggeven of false retourneren werkt alleen als je in de hoofdfunctie van de uitvoering zit, anders werkt het niet.


Antwoord 9

Ik hou er niet van om dingen te beantwoorden die geen echte oplossing zijn…

…maar toen ik hetzelfde probleem tegenkwam, maakte ik onderstaande tijdelijke oplossing:

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)
  }
}

Ik hoop dat het voor iedereen nuttig kan zijn.


Antwoord 10

Als u jQuery gebruikt. Dit zou moeten stoppen met de functie van borrelen tot zodat de bovenliggende functie die dit belt ook te stoppen.

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

Antwoord 11

Afsluiten (); kan worden gebruikt om voor de volgende validatie te gaan.


Antwoord 12

Typ een willekeurige opdracht die een foutgeeft, bijvoorbeeld:

exit

of

die:-)

Other episodes