2010-09-30 4 views
13

Ogni variabile globale in JavaScript è una proprietà di 'finestra'accesso tutte le variabili locali

A quanto pare tutte le variabili locali (proprio come argomenti) vengono memorizzate come proprietà del 'Call object' (vedi capitolo 4.6.2 di ogni funzione. Persumably solo esistente per la durata di detta funzione.

Fondamentalmente voglio essere in grado di fare

for (var obj in CallObject) { // } 

Posso accedere a detto oggetto che contiene le variabili locali e se sì, come? in alternativa c'è un altro modo di accedere a tutte locale va possibilità di una funzione.

[Edit]

Si scopre che gli argomenti è una proprietà dell'oggetto Attivazione di una funzione. Questo deve essere memorizzato da qualche parte.

"L'oggetto di attivazione è puramente un meccanismo specifica . È impossibile per un programma ECMAScript per accedere all'oggetto attivazione".

Si scopre che gli stati ECMAScript non sono autorizzati ad accedervi.

E per accedere alle proprietà degli argomenti e in qualche modo concatenare fino a variabili locali?

+2

Non c'è un modo per farlo in Javascript. Inoltre, i globali non sono (in senso stretto) sempre proprietà di "finestra" - dipende da dove sta girando l'interprete. In un programma Javascript lato server in esecuzione in V8 o Rhino, ad esempio, non esiste una "finestra", ma esiste un oggetto "contesto globale" che svolge lo stesso ruolo (per quanto riguarda la domanda). – Pointy

risposta

3

No. Non c'è modo di farlo in nessuna implementazione del browser di JavaScript.

E 'teoricamente possibile che un'implementazione potrebbe fornire una proroga per consentire il codice di ispezionare l'oggetto variabile corrente (alias l'oggetto di attivazione all'interno di una funzione, "oggetto di chiamata" è un termine composto da Flanagan che non è menzionato ovunque all'interno del ECMAScript spec) ma nessuna implementazione che conosca fa questo.

1

Si ottiene un array implicito chiamato "argomenti" in ogni funzione, ma accanto a questo non esiste una cosa del genere.

+0

sì c'è - 'questo'. ma non è molto utile – mykhal