"Ambito" si riferisce al contesto di esecuzione corrente in cui il codice può fare riferimento o "vedere" valori ed espressioni. Variabili, oggetti e funzioni di varie parti del codice sono accessibili in base ai rispettivi ambiti.
In JavaScript, variabili, oggetti e funzioni possono avere un ambito globale, un ambito di modulo, un ambito di blocco o un ambito di funzione.
Ambito globale in JavaScript
Qualsiasi valore dichiarato al di fuori di una funzione o di un blocco in uno script ha un ambito globale e qualsiasi altro file di script nel programma può accedervi.
Ad esempio, dichiarando una variabile globale in un file:
// index.js
lascia GlobalVariable = "un certo valore"
Significa che qualsiasi altro script nel tuo programma può accedervi:
// altroScript.js
consolle.log (variabile globale) // un certo valore
Dichiarazione di variabili JavaScript nell'ambito globale è una cattiva pratica perché può portare all'inquinamento dello spazio dei nomi. Lo spazio dei nomi globale è lo spazio superiore di Javascript che contiene le variabili, gli oggetti e le funzioni. In un browser, si collega al file
Finestra oggetto, mentre NodeJS utilizza un oggetto denominato globale.L'inquinamento dello spazio dei nomi globale può portare a una collisione di nomi. Questa è una situazione in cui il codice tenta di utilizzare lo stesso nome di variabile per cose diverse nello stesso spazio dei nomi. Le collisioni di nomi si verificano spesso in progetti di grandi dimensioni che utilizzano diverse librerie di terze parti.
Ambito del modulo
Un modulo è un file autonomo che incapsula ed esporta parti di codice per altri moduli in un progetto da utilizzare. Ti consente di organizzare e mantenere la tua base di codice in modo più efficiente.
Moduli ES formalizzati il modello del modulo JavaScript in JavaScript nel 2015.
Le variabili dichiarate in un modulo hanno lo scopo di quel modulo, il che significa che nessun'altra parte del programma può accedervi.
Puoi usare una variabile dichiarata in un modulo al di fuori di esso solo se il modulo esporta quella variabile usando il esportare parola chiave. Puoi quindi importare quel nome in un altro modulo usando il file importare parola chiave.
Ecco un esempio che mostra l'esportazione di una classe:
// index.js
esportareclassePippo{
costruttore(proprietà_1, proprietà_2) {
questo.proprietà_1 = proprietà_1
questo.proprietà_2 = proprietà_2
}
}
Ed ecco come puoi importare quel modulo e usare la proprietà che esporta:
// someModule.js
importare {Pippo} da './index.js'const bar = nuovo Foo('pippo', 'sbarra')
consolle.log (bar.proprietà_1) // pippo
I file non sono dichiarati come moduli per impostazione predefinita in JavaScript.
In JavaScript lato client, puoi dichiarare uno script come modulo impostando il genere attribuire a modulo sul sceneggiatura etichetta:
<tipo di script="modulo" sorgente="index.js"></script>
In NodeJS, puoi dichiarare uno script come modulo impostando il genere proprietà a modulo nel tuo pacchetto.json file:
{
"genere": "modulo"
}
Ambito di blocco
Un blocco in JavaScript è il punto in cui iniziano e finiscono un paio di parentesi graffe.
Variabili dichiarate all'interno di un blocco con permettere, e cost le parole chiave hanno lo scopo di quel blocco, il che significa che non puoi accedervi al di fuori di esso. Questo ambito non si applica alle variabili dichiarate utilizzando il var parola chiave:
{ // Inizio del blocco
cost uno = '1'
lascia due = '2'
var tre = '3'
} // Fine del bloccoconsolle.log (uno) // genera un errore
consolle.log (tre) // "3"
Le variabili racchiuse nel blocco sopra e dichiarate come const o let sono accessibili solo all'interno del blocco. Tuttavia, puoi accedere alla variabile dichiarata usando il var parola chiave fuori dal blocco.
Ambito della funzione
Le variabili dichiarate all'interno di una funzione sono comunemente denominate variabili locali e hanno come ambito la funzione. Non è possibile accedervi al di fuori della funzione. Questo ambito si applica alle variabili dichiarate con var, permettere, e cost parole chiave.
Poiché le variabili dichiarate in una funzione sono locali alla funzione, i nomi delle variabili possono essere riutilizzati. Il riutilizzo dei nomi delle variabili con ambito funzione è noto come ombreggiatura delle variabili e si dice che la variabile esterna sia "ombreggiata".
Per esempio:
funzionemoltiplicare() {
permettere uno = 1
var due = 2
cost tre = 3Restituzione uno due tre
}
// Ombreggiatura variabile
cost tre = 'tre' // Non genera un errore
Una comprensione delle regole di ambito è vitale
Avere una conoscenza degli ambiti disponibili in JavaScript ti consente di evitare errori più facilmente. Cercare di accedere a una variabile che non è disponibile in un particolare ambito è una fonte matura di bug.
La comprensione dell'ambito coinvolge anche concetti come l'inquinamento globale dello spazio dei nomi, che può rendere il codice più soggetto a bug.