2010-10-22 19 views
9

Dato il seguente JavaScript:variabile JavaScript accesso locale con lo stesso nome in interno ed esterno Ambito

var someFunction = function(id) { 
    //do some stuff 
    var modifyId = function(id) { 
    //do some stuff 
    outer.id = id; //is there any way to modify the id variable in the outer scope from here? 
    } 
} 

Come si fa a modificare l'id passato nel campo di applicazione funzione di esterno dal nell'ambito funzione interna?

+0

Tutte le risposte in una: non è possibile, è necessario rinominare uno di loro –

risposta

10

Purtroppo non è possibile. Denominando il parametro nella funzione nidificata id, è stato ombreggiato il parametro nella funzione esterna. Javascript non contiene alcuna possibilità per accedere al nome in ombra. L'unica opzione è scegliere un nome diverso per una delle variabili.

1

Perché non puoi semplicemente rinominare una delle variabili?

2

No, non c'è. Dall'interno di una funzione, non c'è modo (qualcosa di strano nel codice di Mozilla o ES5 a parte) di riferirsi all'ambito come un contesto in qualsiasi modo esplicito, e non c'è modo di scalare la catena di scope lessicale in alcun modo diretto.

Buona domanda però.

1
var someFunction = function(id) { 
    //do some stuff 
    var oid = id; 
    var modifyId = function(id) { 
    //do some stuff 
    // you can access the outer id via the oid variable 
    } 
} 

Ma, sì, dovresti semplicemente rinominare uno dei parametri formali.

+0

All'inizio ho pensato che funzionasse, ma non funzionerà se id è un primitivo. L'impostazione 'oid =" BLAH "' dalla funzione interna non cambierà il valore di id. Se fosse un oggetto, sia id che oid punterebbero allo stesso oggetto, che è quasi l'effetto desiderato (non è ancora possibile cambiare l'ID oggetto puntando a chiamare 'oid = {a: 1}' –

+0

@Juan Sì. Poiché id è una stringa (presumo), ciò significa che il mio work-around è praticamente inutile in questo caso, quindi rimane l'unica soluzione per evitare parametri formali con gli stessi nomi nelle funzioni annidate. –

Problemi correlati