3 Stimmen

javascript-abschlüsse und funktionsplatzierung

Wirkt sich die Platzierung einer Funktion auf die Leistung von Abschlüssen innerhalb des Geltungsbereichs aus? Wenn ja, wo ist der optimale Ort für die Platzierung dieser Funktionen? Wenn nicht, ist die implizite Assoziation durch eine Schließung Grund genug, eine Funktion logischerweise an einem anderen Ort zu platzieren?

Zum Beispiel, wenn foo ist nicht auf den Wert von localState ist die Tatsache, dass localState ist erreichbar von foo haben Auswirkungen auf foo die Ausführungszeit, den Speicherverbrauch usw.?

(function(){
    var localState;

    function foo(){
        // code
    }

    function bar(){
        // code
        return localState;
    }
})();

Mit anderen Worten: Wäre dies die bessere Wahl, und wenn ja, warum?

(function(){
    function foo(){
        // code
    }

    var localState;

    function bar(){
        // code
        return localState;
    }
})();

Darius Bacon hat vorgeschlagen unter dass die beiden oben genannten Proben identisch sind, da localState kann von jeder Stelle des Blocks aus aufgerufen werden. Das folgende Beispiel zeigt jedoch, dass foo außerhalb des Blocks definiert ist, kann ein anderer Fall sein. Was meinen Sie dazu?

function foo(){
    // code
}

(function(){

    var localState;

    function bar(){
        // code
        foo();
        return localState;
    }
})();

0voto

coderjoe Punkte 10951

In Ihren Beispielen ist der Unterschied nicht wirklich von Bedeutung. Selbst wenn foo im globalen Bereich ist, werden Sie kein Problem haben.

Es ist jedoch sinnvoll, sich vor Augen zu halten, dass die Reihenfolge der Deklaration von Funktionen zu Variablen zu einem Problem werden kann, wenn Sie die Art der Zuweisung von Funktionen zu Variablen für die Deklaration Ihrer Funktionen verwenden.

Um eine bessere Vorstellung zu bekommen, sollten Sie die folgenden zwei Beispiele ausprobieren:

CheckOne();
function CheckOne() {
    alert('check...check one.');
}

CheckTwo();
var CheckTwo = function() {
    alert('check...check two.');
};

Der einzige Unterschied zwischen der zweiten und der ersten ist der Stil, den sie für die Deklaration ihrer Funktionen verwenden. Die zweite erzeugt einen Referenzfehler.

Zum Wohl.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X