non ho capito bene un concetto: lo "shadowing"
Personalmente non ho mai usato quel termine ma ho letto a cosa si riferisce e capisco bene cosa significa.
In programmazione viene definito "scope shadowing" quel meccanismo in cui avendo definito una variabile con un certo nome (identificatore) visibile per un certo ambito, lo stesso nome può essere usato in ambiti più interni per definire un'altra variabile che sostanzialmente va a "nascondere", all'interno di quest'ambito, il valore della variabile definita nell'ambito esterno.
Semplice esempio:
codice:
var x = 1; // variabile globale (questa è anche accessibile usando window.x)
console.log(x); // output: 1
(function(){ // funzione auto-eseguita (quindi si crea un ambito locale)
console.log(x); // output: 1 (riferimento generico alla variabile x)
console.log(window.x); // output: 1 (riferimento specifico alla stessa variabile x)
})();
(function(){ // altra funzione auto-eseguita
var x = 2; // concetto di "shadowing"; usando lo stesso nome (identificatore) x, questa variabile locale "adombra" quella globale (dell'ambito esterno)
console.log(x); // output: 2 (il valore della variabile locale)
console.log(window.x); // output: 1 (usando window ci si riferisce in modo specifico alla variabile globale x)
})();
Fai sapere se è più chiaro o se servono ulteriori spiegazioni.
Per comprendere questo concetto è opportuno avere ben chiaro cosa sia lo scope, cioè l'ambito di visibilità delle variabili.
e cosa centra con la proprietà window
Forse è più specifico parlare di "oggetto window" (il cui ambito è quello globale), se è questo ciò a cui ti riferisci. Magari l'esempio può fornire una chiave di lettura ma ad ogni modo il discorso andrebbe contestualizzato per poterti fornire una risposta precisa.