2011-12-10 12 views

risposta

11

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 ...

7

C'è tecnicamente nessun problema con esso. La funzione registrerà lo str che è attualmente in ambito (il tuo parametro).

Per ovvi motivi, questa non è considerata una buona idea. Per lo meno, rende il codice illeggibile.

Problemi correlati