Quando e dove dovremmo usare il sollevamento in Javascript [chiuso]


11

Sono nuovo di Javascript. Sto imparando il concetto di sollevamento in Javascript.
Sulla base dei tutorial di Javacsript nel sito Web di Mozilla , mi sono imbattuto in questa parola hoisting. Secondo questi tutorial, le variabili in JavaScript indicano che è possibile fare riferimento a una variabile dichiarata in seguito, senza ottenere un'eccezione . Ma la mia domanda è su quali circostanze è adatto usare il sollevamento in un Javascript lato client o perché dovremmo usare il sollevamento in Javascript. Quali sono i suoi vantaggi?


1
Condividere la tua ricerca aiuta tutti. Raccontaci cosa hai provato e perché non ha soddisfatto le tue esigenze. Ciò dimostra che hai impiegato del tempo per cercare di aiutarti, ci salva dal ribadire risposte ovvie e, soprattutto, ti aiuta a ottenere una risposta più specifica e pertinente. Vedi anche Come chiedere
moscerino

6
@gnat Dopo tutte le ricerche, se avessi compreso questo argomento, perché avrei dovuto pubblicare questa domanda qui, per discutere e comprendere correttamente il concetto
Rudra

2
@Rudra Questo non è un forum di discussione . Inoltre, non hai mostrato alcuna prova che hai effettivamente ricercato questo.
Doval,

5
Sì, ma non è un requisito per porre domande.
Robert Harvey,

2
@Rudra: tieni presente che non siamo un forum di discussione. In realtà siamo un sito di domande e risposte. Le domande qui poste devono essere mirate a rispondere in modo ragionevole all'interno del formato Domande e risposte.
Robert Harvey,

Risposte:


11

Non ho mai sentito il termine "sollevamento" utilizzato. Se ti riferisci a questo uso del sollevamento da parte di Ben Cherry: http://www.adequatelygood.com/JavaScript-Scoping-and-Hoisting.html , da quello che posso raccogliere, sta semplicemente facendo eco a Douglas Crockford da Javascript: The Parti buone e dicendo che non dovresti mai usare il sollevamento . La sua affermazione alla fine è che tutte le variabili dovrebbero essere dichiarate all'inizio della tua funzione (come suggeriscono Crockford e JSLint).

Oppure, nelle parole di Mr. ChristopherBrown, non è una funzione da usare , per dire, ma semplicemente una stranezza relativa al modo in cui il browser interpreta Javascript.

Quindi, in breve: mai e da nessuna parte .


1
Quindi, perché è incluso questo concetto e di cosa tratta questa funzionalità?
Rudra,

@Rudra: il sottotitolo "Dichiarazioni, nomi e sollevamento" nell'articolo collegato da David sembra coprire abbastanza bene. Quale parte non è chiara?
Robert Harvey,

@RobertHarvey Voglio solo sapere dove e quando lo usano. David dice che non viene usato mai e da nessuna parte, ma perché viene mostrato come funzionalità
Rudra il

4
Solo perché qualcosa è una caratteristica non significa che sia una buona idea. Ci sono molte ragioni per cui le "caratteristiche" non sono favorevoli. Anche la tua appendice non ha uno scopo apparentemente utile, anche se probabilmente lo era ai tempi dell'uomo delle caverne.
Robert Harvey,

1
HOisting è un termine della teoria dei compilatori, in particolare l'ottimizzazione. È in circolazione da almeno 20 anni, ma reso popolare da questa peculiarità di Javascript. Se non fosse chiamato funzionalità, sarebbe probabilmente un bug.
david.pfx,

16

Il sollevamento descrive una funzionalità di come JavaScript viene interpretato dal browser e non è tanto una funzionalità da utilizzare.

Durante l'interpretazione di Javascript, i browser scoprono le variabili a livello di funzione all'inizio della funzione. Esempio:

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

Nel codice pubblicato, entrambe le variabili "due" e "risultato" esistono all'inizio dell'ambito della funzione (ovviamente, come sono dichiarate lì.) Tuttavia, poiché i browser "sollevano" le variabili, il seguente diventa codice Javascript legale .

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

L'effetto netto qui è che hai variabili in uso prima di dichiararle, e questo può causare confusione, specialmente con variabili di portata globale. Esempio:

var result = 6;

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

Per evitare confusione, dichiarare le variabili all'inizio di una funzione.


4
+1: ecco come risponderei. Non è una funzionalità da utilizzare o non utilizzare, è solo una proprietà dell'ambiente da tenere in considerazione.
scrwtp,

1

Perché?

JavaScript non ha Block Scope , questo dovrebbe spiegare perché le cose dovrebbero essere sollevate in alto.

È utile?

Se preferisci questo:

var someVariable = someVariable || {};

Invece di questo:

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

Quindi è utile. Anche se non lo noti!

Clearification

Il primo esempio si tradurrà in qualcosa del genere:

var someVariable = someVariableValue;

if ( "undefined" !== typeof someVariable ) {
    var someVariableValue = someVariable;
} else {
    var someVariableValue = {};
}
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.