Kiedy i gdzie powinniśmy używać podnoszenia w JavaScript [zamknięte]

11

Jestem nowy w Javascript. Uczę się pojęcia podnoszenia w JavaScript.
Na podstawie samouczków Javacsript na stronie Mozilli natknąłem się na to słowo hoisting. Zgodnie z tymi samouczkami zmiennymi w JavaScript jest to, że można odwoływać się do zmiennej zadeklarowanej później, bez uzyskiwania wyjątku . Ale moje pytanie dotyczy tego, w jakich okolicznościach należy używać podnoszenia w javascript po stronie klienta lub dlaczego powinniśmy używać podnoszenia w javascript. Jakie są jego zalety.

Rudra
źródło
1
Udostępnianie badań pomaga wszystkim. Powiedz nam, co próbowałeś i dlaczego nie spełnia twoich potrzeb. To pokazuje, że poświęciłeś trochę czasu, aby spróbować sobie pomóc, oszczędza nam to powtarzania oczywistych odpowiedzi, a przede wszystkim pomaga uzyskać bardziej konkretną i odpowiednią odpowiedź. Zobacz także How to Ask
gnat
6
@gnat Po tych wszystkich badaniach, gdybym zrozumiał ten temat, dlaczego miałbym zamieścić to pytanie tutaj, aby odpowiednio przedyskutować i zrozumieć tę koncepcję
Rudra
2
@Rudra To nie jest forum dyskusyjne . Co więcej, nie pokazałeś żadnego dowodu , że faktycznie to badałeś.
Doval
5
Tak, ale nie jest to wymagane do zadawania pytań.
Robert Harvey
2
@ Rudra: Pamiętaj, że nie jesteśmy forum dyskusyjnym. W rzeczywistości jesteśmy stroną z pytaniami i odpowiedziami. Zadawane tutaj pytania powinny mieć zakres pozwalający na rozsądną odpowiedź w formacie pytań i odpowiedzi.
Robert Harvey

Odpowiedzi:

11

Nigdy nie słyszałem o użyciu słowa „podnoszenie”. Jeśli masz na myśli to użycie podnoszenia przez Ben Cherry: http://www.adequatelygood.com/JavaScript-Scoping-and-Hoisting.html , to z tego, co mogę zebrać, po prostu przypomina Douglasa Crockforda z Javascript: Dobre części i mówiąc, że nigdy nie należy używać podnoszenia . Na koniec twierdzi, że wszystkie zmienne powinny być deklarowane na górze twojej funkcji (jak sugerują Crockford i JSLint).

Lub, jak mówi pan ChristopherBrown, nie jest to funkcja do użycia , per-say, ale po prostu dziwactwo związane z tym, jak przeglądarka interpretuje Javascript.

Krótko mówiąc: nigdy i nigdzie .

David Cowden
źródło
1
Dlaczego zatem uwzględniono tę koncepcję i na czym ona polega?
Rudra
@Rudra: Podtemat „Deklaracje, nazwy i podnoszenie” w artykule David link wydaje się całkiem dobrze to opisywać. Która część jest niejasna?
Robert Harvey
@RobertHarvey Chcę tylko wiedzieć, gdzie i kiedy tego używają. David mówi, że nie jest używany nigdy i nigdzie, ale dlaczego jest pokazany jako funkcja
Rudra
4
To, że coś jest funkcją, nie oznacza, że ​​to dobry pomysł. Istnieje wiele powodów, dla których „funkcje” nie są przychylne. Nawet wyrostek robaczkowy nie ma pozornie pożytecznego celu, chociaż prawdopodobnie robił to w czasach jaskiniowców.
Robert Harvey
1
HOisting to termin z teorii kompilatora, szczególnie optymalizacji. Istnieje już od co najmniej 20 lat, ale stał się popularny dzięki tej osobliwości Javascript. Gdyby nie była nazywana funkcją, prawdopodobnie byłby to błąd.
david.pfx
16

Podnoszenie opisuje funkcję interpretacji Javascript przez przeglądarkę i nie jest zbyt dużą opcją do użycia.

Podczas interpretacji Javascript przeglądarki przeglądają zmienne na poziomie funkcji na początku funkcji. Przykład:

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

W opublikowanym kodzie obie zmienne „dwa” i „wynik” istnieją na początku zakresu funkcji (oczywiście, ponieważ są tam deklarowane). Ponieważ jednak przeglądarki „podnoszą” zmienne, poniższy kod staje się legalnym kodem Javascript .

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

Efektem netto jest to, że masz zmienne w użyciu, zanim je zadeklarujesz, co może powodować zamieszanie, szczególnie w przypadku zmiennych o zasięgu globalnym. Przykład:

var result = 6;

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

Aby uniknąć nieporozumień, zadeklaruj swoje zmienne na górze funkcji.

ChristopherBrown
źródło
4
+1: tak bym odpowiedział. Nie jest to funkcja do użycia lub nie, jest to tylko właściwość środowiska, którą należy wziąć pod uwagę.
scrwtp
1

Dlaczego?

JavaScript nie ma zakresu bloków , co powinno wyjaśniać, dlaczego rzeczy powinny się wznosić na szczyt.

To jest użyteczne?

Jeśli wolisz to:

var someVariable = someVariable || {};

Zamiast tego:

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

To jest przydatne. Nawet jeśli tego nie zauważysz!

Wyjaśnienie

Pierwszy przykład przełoży się na coś takiego:

var someVariable = someVariableValue;

if ( "undefined" !== typeof someVariable ) {
    var someVariableValue = someVariable;
} else {
    var someVariableValue = {};
}
Mahdi
źródło