2016-05-14 2 views
1

Warum sollten wir Call-Funktionen innerhalb Bedingungen in Funktionen vermeiden? Zum Beispiel:Vermeiden Sie die Verwendung von Funktionen im Inneren, wenn Bedingung - Javascript

var numberChoice = function(number){ 
    if (number == 1){ 
     alert("You have choosen 1"); 
     nextLevel(); 
    } 

    else if(number == 2){ 
     alert ("You have choosen 2"); 
     nextLevel2(); 
    } 

    else{ 
     alert("Please choose a number within range 1-2"); 
     guessAgain(); 
    } 
}; 

var number = prompt("What is your number?"); 

Ich könnte möglicherweise missverstanden haben, was los ist. Kannst du es erklären?

function example(){ 
    function a() {} // Okay 
    if (something) { 
    function b() {} // Danger! 
    } 
} 

Haverbeke, Marijn (2014-12-04). Eloquent JavaScript: Eine moderne Einführung in die Programmierung (Kindle Standorte 1168-1169). Keine Stärkepresse. Kindle Edition.

+1

Sie können Funktionen innerhalb der Bedingung aufrufen. Wer hat das gesagt, um innerhalb einer if-Anweisung keine Funktion aufzurufen? –

+0

Was sagt dir, dass du das nicht tust? –

+1

Außerdem ruft der angegebene Code Funktionen innerhalb 'If' Körper, nicht Bedingung. Sprechen wir über das Gleiche? –

Antwort

0

Wenn Ihre Funktion (innerhalb der if-Bedingung) asynchron ist, gibt es kein Problem. Die Funktionen, die Sie verwenden, sind synchron - was bedeutet, dass Ihr Skript die Ausführung beendet und einen Wert zurückgibt, bevor es zur nächsten Aufgabe geht - in diesem Fall wird es funktionieren. Für die asynchrone Funktion (die parallel zu den anderen Befehlszeilen ausgeführt wird) werden die Ergebnisse dieser Funktion noch nicht zurückgegeben und das Skript wird ohne den richtigen Wert (Rückgabewert) fortgesetzt - dies führt zu einem Problem.

0

In Ihren beiden Beispiel gibt es kein Problem.

Es gibt keine Regel, die es nicht erlaubt, die Funktion in einer if-Bedingung aufzurufen.

der einzige Punkt ist eine Warnung, wenn Sie mehrere haben, wenn auf der gleichen Prüfung:

if (number === 1) { 
    function1(); 
} 

    if (number === 2) { 
     function2(); 
} 

in diesem Fall, wenn Sie am Ende Ihrer Funktion nicht Rückkehr setzen, wenn die Funktion aufgerufen werden andere Bedingung wird ausgewertet.

besserer Code verwendet else oder switch

In Ihrem Fall gibt es kein Problem.

Verwandte Themen