Wann und wo sollten wir das Heben in Javascript verwenden? [Geschlossen]

11

Ich bin neu in Javascript. Ich lerne das Konzept des Hebens in Javascript.
Basierend auf den Javacsript-Tutorials auf der Mozilla- Website bin ich auf dieses Wort gestoßen hoisting. Laut diesen Tutorials können Sie in JavaScript auf eine später deklarierte Variable verweisen, ohne eine Ausnahme zu erhalten . Meine Frage ist jedoch, unter welchen Umständen das Heben in einem clientseitigen Javascript geeignet ist oder warum wir das Heben in Javascript verwenden sollten. Was sind seine Vorteile.

Rudra
quelle
1
Das Teilen Ihrer Forschung hilft allen. Sagen Sie uns, was Sie versucht haben und warum es Ihren Anforderungen nicht entsprach. Dies zeigt, dass Sie sich die Zeit genommen haben, um sich selbst zu helfen. Es erspart uns, offensichtliche Antworten zu wiederholen, und vor allem hilft es Ihnen, eine spezifischere und relevantere Antwort zu erhalten. Siehe auch Fragen
Mücke
6
@gnat Nach all den Recherchen, wenn ich dieses Thema verstanden hätte, warum hätte ich diese Frage hier gepostet, um das Konzept richtig zu diskutieren und zu verstehen
Rudra
2
@ Rudra Dies ist kein Diskussionsforum . Darüber hinaus haben Sie keinen Beweis dafür erbracht, dass Sie dies tatsächlich untersucht haben.
Doval
5
Ja, aber es ist keine Voraussetzung, um Fragen zu stellen.
Robert Harvey
2
@ Rudra: Denken Sie daran, dass wir kein Diskussionsforum sind. Wir sind eigentlich eine Q & A-Site. Die hier gestellten Fragen sollten so gefasst sein, dass sie im Q & A-Format angemessen beantwortet werden können.
Robert Harvey

Antworten:

11

Ich habe noch nie den Begriff "Heben" gehört. Wenn Sie sich auf diese Verwendung des Hebens von Ben Cherry beziehen: http://www.adequatelygood.com/JavaScript-Scoping-and-Hoisting.html , dann wiederholt er, soweit ich das beurteilen kann, einfach Douglas Crockford aus Javascript: The Gute Teile und sagen, dass Sie niemals Heben verwenden sollten . Seine Behauptung am Ende ist, dass alle Variablen am Anfang Ihrer Funktion deklariert werden sollten (wie Crockford und JSLint vorschlagen).

Oder, in den Worten von Herrn ChristopherBrown, es ist keine Funktion, die man verwenden kann, sondern einfach eine Eigenart, die sich darauf bezieht, wie der Browser Javascript interpretiert.

Kurz gesagt: niemals und nirgendwo .

David Cowden
quelle
1
Warum ist dieses Konzept dann enthalten und worum geht es in dieser Funktion?
Rudra
@ Rudra: Das Unterthema "Erklärungen, Namen und Heben" in dem Artikel, den David verlinkt hat, scheint dies ziemlich gut abzudecken. Welcher Teil ist unklar?
Robert Harvey
@ RobertHarvey Ich möchte nur wissen, wo und wann sie dies verwenden. David sagt, es wird nie und nirgendwo verwendet, aber warum wird es als Feature gezeigt
Rudra
4
Nur weil etwas ein Feature ist, heißt das nicht, dass es eine gute Idee ist. Es gibt viele Gründe, warum "Features" in Ungnade fallen. Sogar Ihr Anhang dient keinem anscheinend nützlichen Zweck, obwohl dies wahrscheinlich in den Tagen der Höhlenmenschen der Fall war.
Robert Harvey
1
HOisting ist ein Begriff aus der Compilertheorie, insbesondere der Optimierung. Es gibt es seit mindestens 20 Jahren, aber durch diese Besonderheit von Javascript populär gemacht. Wenn es nicht als Feature bezeichnet würde, wäre es wahrscheinlich ein Fehler.
david.pfx
16

Das Heben beschreibt eine Funktion, wie Javascript vom Browser interpretiert wird, und ist weniger eine zu verwendende Funktion.

Bei der Interpretation von Javascript reichen Browser Variablen auf Funktionsebene am Anfang der Funktion ein. Beispiel:

function AddTwoAndTwo() {
    var two = 2;
    var result = two + two;
    return result;
}

Im veröffentlichten Code sind beide Variablen "zwei" und "Ergebnis" zu Beginn des Funktionsumfangs vorhanden (offensichtlich, wie sie dort deklariert sind). Da die Browser die Variablen jedoch "hochziehen", wird der folgende Code zu legalem Javascript-Code .

function AddTwoAndTwo() {
    result = 5;
    alert(result);
    var two = 2;
    var result = two + two;
    return result;
}

Der Nettoeffekt hierbei ist, dass Sie Variablen verwenden, bevor Sie sie deklarieren. Dies kann zu Verwirrung führen, insbesondere bei Variablen mit globalem Gültigkeitsbereich. Beispiel:

var result = 6;

function AddTwoAndTwo() {
    alert(result);  // should this be 6 or undefined?
    var two = 2;
    var result = two + two;
    return result;
}

Um Verwirrung zu vermeiden, deklarieren Sie Ihre Variablen oben in einer Funktion.

ChristopherBrown
quelle
4
+1: So würde ich antworten. Es ist keine zu verwendende oder nicht zu verwendende Funktion, sondern nur eine zu berücksichtigende Eigenschaft der Umgebung.
Scrwtp
1

Warum?

JavaScript muss nicht blockieren Scope , die erklären sollte , warum die Dinge sollten Flaschenzug nach oben.

Ist es nützlich?

Wenn Sie dies bevorzugen:

var someVariable = someVariable || {};

An Stelle von:

if ( "undefined" !== typeof someVariable ) {
    someVariable = someVariable;
} else {
    someVariable = {};
}

Dann ist es nützlich. Auch wenn Sie es nicht bemerken!

Klarstellung

Das erste Beispiel wird in etwa so übersetzt:

var someVariable = someVariableValue;

if ( "undefined" !== typeof someVariable ) {
    var someVariableValue = someVariable;
} else {
    var someVariableValue = {};
}
Mahdi
quelle