Questa è solo una situazione di ambito standard: il fatto che si tratti di un'espressione di funzione anonima passata come parametro a un'altra funzione non ha importanza. Si noti che all'interno della propria funzione performAction()
(che non viene visualizzata) non avrà alcun accesso allo str
che è il parametro della funzione di callback - se riferimenti str
otterrà la variabile globale "Internet" (o il proprio locale str
se definito).
I parametri di una funzione sono, ai fini dell'ambito, uguali alle variabili locali di tale funzione, il che significa che mascherano altre variabili con lo stesso nome dall'ambito esterno, ma è possibile accedere a variabili con nomi diversi anche se definite in un più ampio scopo.
Dove si potrebbe creare confusione è se si fa qualcosa di simile:
var str = "internet";
(function(str) {
console.log(str); // "internet"
str = "local param";
console.log(str); // "local param"
})(str);
console.log(str); // "internet"
In questo caso ho una funzione con un parametro chiamato str
ma quando lo chiamo io sto passando in un diverso str
. Si noti che la modifica di str
all'interno di tale funzione modifica solo lo str
locale, non quello globale. Sono due diverse variabili ...
No, non dimenticare che in realtà non è la stessa variabile. –
Grazie mille! –