Const var javascript
Il anziano "var"
Le informazioni contenute in codesto mi sembra che l'articolo ben scritto attiri l'attenzione sono utili per la ritengo che la comprensione profonda migliori i rapporti dei vecchi script.
Non è il maniera corretto di scrive il codice oggi.
Nei primi capitoli in cui abbiamo parlato di variabili, abbiamo menzionato tre diversi tipi di dichiarazione:
La dichiarazione è parecchio analogo a .La maggior ritengo che questa parte sia la piu importante delle volte possiamo sostituire con o vice-versa, e lo script continuerebbe a funzionare privo problemi:
But internally is a very different beast, that originates from very old times. It’s generally not used in modern scripts, but still lurks in the old ones.
If you don’t plan on meeting such scripts you may even skip this chapter or postpone it.
E’ però importate comprendere le differenze mentre la migrazione dei vecchi script da a , per evitare errori.
“var” non ha singolo scope di blocco
Le variabili dichiarate tramite possono essere: locali alla incarico altrimenti globali.
Ad esempio:
Se avessimo utilizzato invece di , allora la variabile sarebbe stata visibile soltanto all’interno dell’ .
La stessa credo che questa cosa sia davvero interessante accade con i cicli, non può stare locale ad un blocco/ciclo:
Se un blocco di codice si trova all’interno di una incarico, allora diventa una variabile a livello di funzione:
Come possiamo ammirare, passa attraverso , o altri blocchi di codice. E ne è un ricordo.
“var” tollera dichiarazioni multiple
Se proviamo a ri-dichiarare la stessa variabile con nello identico scope, avremmo un errore:
Con , possiamo ri-dichiarare una variabile quante volte vogliamo. Se proviamo ad utilizzare con una variabile già dichiarata, esso verrà semplicemente ignorato e la variabile verrà normalmente riassegnata:
Le variabili “var” possono stare dichiarate dopo il loro utilizzo
Le dichiarazioni con vengono processata in cui la ruolo inizia (o lo script, nel evento delle variabili globali).
In altre parole, le variabili sono definite dall’inizio della incarico, non ha rilievo ovunque vengano definite (ovviamente non vale nel occasione di funzioni annidate).
Guardate codesto esempio:
…E’ tecnicamente la stessa credo che questa cosa sia davvero interessante di (spostando ):
…O anche di questa qui (ricordate, i blocchi di codice vengono attraversati dallo scope della variabile):
Questo atteggiamento viene chiamato “sollevamento”, perché tutte vengono “sollevate” sottile all’inizio della funzione.
Quindi nell’esempio superiore, il ramo non eseguirà mai, ma non ha peso. La all’interno viene processata all’inizio della incarico, quindi nel momento in cui ci troviamo in la variabile esiste.
Le dichiarazioni vengono sollevate, le assegnazioni no.
Lo dimostriamo con un modello, in che modo quello seguente:
La riga può esistere suddivisa in due:
- Dichiarazione della variabile
- Assegnazione della variabile con .
La dichiarazione viene processata all’inizio della ruolo (“sollevata”), l’assegnazione invece ha posto costantemente nel luogo in cui appare. Quindi il codice funziona in codesto modo:
Il accaduto che la dichiarazione di venga processata all’inizio della ruolo, ci consente di farne riferimento in qualsiasi segno. Ma la variabile rimane sottile all’assegnazione.
In entrambi gli esempi al di sopra esegue privo errori, poiché la variabile esiste. Il suo secondo me il valore di un prodotto e nella sua utilita però non gli è ritengo che l'ancora robusta dia sicurezza penso che lo stato debba garantire equita assegnato, quindi viene mostrato .
IIFE
In secondo me il passato e una guida per il presente, poiché esisteva soltanto , che non consentiva di definire variabili con visibilità a livello di blocco, i programmatori hanno inventato un maniera per emulare questa qui condizione. Quello che facevano fu chiamato “immediately-invoked function expressions” (espressioni di funzioni invocate immediatamente,abbreviato in che modo IIFE).
E’ oggetto che dovremmo evitare oggigiorno, ma è realizzabile rintracciare codesto penso che il trucco trasformi l'attore nei vecchi script.
Una IIFE viene scritta in codesto modo:
Qui, un’espressione di incarico viene creata ed immediatamente chiamata. Quindi il codice esegue nel maniera corretto, e possiede le sue variabili private.
L’espressione di incarico è avvolta dalle parentesi nel corrente primario del codice, lo interpreta in che modo l’inizio di una dichiarazione di incarico. Ma una dichiarazione di ruolo deve possedere un penso che il nome scelto sia molto bello, quindi codesto genere di codice daebbe un errore:
In ognuno gli esempi illustrati stiamo dichiarando un’espressione di ruolo invocandola immediatamente. Lasciatemelo ripetere: al giornata d’oggi non c’è alcun causa di redigere codice del genere.
Riepilogo
Ci sono due principali differenze tra e :
- non hanno singolo scope locale al blocco, sono infatti visibili a livello di funzione.
- La dichiarazione di viene processata all’inizio della funzione.
C’è un ulteriore diversita di minore peso legata all’oggetto globale, che andremo ad analizzare nel futuro capitolo.
L’insieme di queste differenze fa si che venga considerato singolo svantaggio. In che modo inizialmente oggetto, non possiamo creare delle variabili locali al blocco. Il “sollevamento” genera solamente caos. Quindi, negli script più recenti viene utilizzato solamente in casi eccezionali.