Perché JavaScript issa le variabili?
Qual era la logica dei progettisti quando hanno deciso di implementare il sollevamento? Esistono altre lingue popolari che lo fanno?
Fornire collegamenti pertinenti alla documentazione e / o ai record.
Perché JavaScript issa le variabili?
Qual era la logica dei progettisti quando hanno deciso di implementare il sollevamento? Esistono altre lingue popolari che lo fanno?
Fornire collegamenti pertinenti alla documentazione e / o ai record.
div
in jQuery
Risposte:
Come spiega Stoyan Stefanov nel libro "JavaScript Patterns", il sollevamento è il risultato dell'implementazione dell'interprete JavaScript.
L'interpretazione del codice JS eseguita in due passaggi. Durante il primo passaggio, l'interprete elabora le dichiarazioni di variabili e funzioni.
Il secondo passaggio è l'effettivo passaggio di esecuzione del codice. L'interprete elabora espressioni di funzioni e variabili non dichiarate.
Quindi, possiamo usare il concetto di "sollevamento" per descrivere tale comportamento.
"Il var hoisting era quindi [una] conseguenza non intenzionale del sollevamento funzionale, nessun ambito di blocco, [e] JS come lavoro urgente del 1995".
"la funzione hoisting consente la scomposizione del programma dall'alto verso il basso, 'let rec' gratuitamente, chiama prima di dichiarare; var hoisting taggato."
Non conosco altri linguaggi popolari che elevano le variabili allo stesso modo. Penso che anche ActionScript, un'altra implementazione di ECMAScript utilizzata nello sviluppo di Flash, non abbia implementato il sollevamento. Questo è stato fonte di confusione e frustrazione per gli sviluppatori che hanno familiarità con altri linguaggi che stanno imparando JavaScript.
AGGIORNAMENTO: Dai commenti, Python ha un comportamento di sollevamento delle variabili simile .
Questo perché l'interprete javascript interpreta il codice in due cicli.
Nel primo ciclo tutte le dichiarazioni di variabili e funzioni vengono portate all'inizio dell'ambito della funzione in cui è in esecuzione. Questo aiuta a creare variableObjects
una execution context
funzione anche prima della sua esecuzione.
Nella seconda fase, le assegnazioni di valori, le istruzioni di codice e le chiamate di funzione avvengono riga per riga nel modo previsto.
Hai una lettura un po 'più dettagliata qui.
Vi darà un quadro più preciso intorno comportamento intorno let
, const
e class
dichiarazioni, anche la precedenza segue tra il variabile e funzioni.