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.


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 .


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.


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 = {};
}
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.