Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

Cos'è lo scope

Il concetto di scope nel contesto della programmazione in Javascript
Il concetto di scope nel contesto della programmazione in Javascript
Link copiato negli appunti

Una traduzione di scope potrebbe essere quella di contesto di esecuzione all'interno del quale una particolare funzione JavaScript viene eseguita. Questo è un concetto abbastanza nuovo per chi proviene da qualche altro linguaggio di programmazione: nei linguaggi funzionali non ha senso parlare di contesto di esecuzione in quanto le diverse funzioni risiedono nello stesso grande contenitore globale, mentre nei linguaggi orientati agli oggetti, nonostante esista un ambiente all'interno del quale ciascun metodo viene invocato, esso non può essere in qualche modo gestito in quanto è sempre rappresentato dall'oggetto stesso sul quale il metodo viene chiamato.

In JavaScript qualsiasi funzione ha uno scope che può essere referenziato tramite la keyword this. Questo costrutto interno al linguaggio serve appunto per fare riferimento al macro-oggetto all'interno del quale il metodo viene eseguito. Se una determinata funzione non presenta uno scope preciso, essa verrà invocata all'interno del oggetto globale window, che, come sappiamo, è uno degli oggetti impliciti del motore di interpretazione di JavaScript quando viene eseguito all'interno di un browser e che rappresenta la finestra aperta dall'utente.

Vediamo subito un esempio:

<script type="text/javascript">
var funzioneGlobale = function() {
  alert(this); // oggetto implicito window
}
var container = {
  funzioneLocale: function() {
    alert(this); //oggetto container
  }
}
funzioneGlobale();
container.funzioneLocale();
</script>

Abbiamo creato due funzioni, una globale e una definita come membro di un oggetto. Nonostante il contenuto della funzione sia lo stesso, l'esito non sarà tale. Infatti funzioneGlobale() viene eseguita all'interno dell'oggetto window mentre funzioneLocale() all'interno del nostro oggetto container. Per questo motivo lo scope tra le due funzioni sarà diverso. Fin qua sembra tutto facile. È tempo di fare un passo avanti.

Ti consigliamo anche