2015-02-19 9 views
6

In un debugger JavaScript, posso ispezionare manualmente il scope chain di una funzione. Per esempio, quando si esegue foo() su questo pezzo di codice:Come controllare a livello di codice la catena dell'ambito JavaScript?

var x1 = "global"; 
var foo = (function main() { 
    var x2 = "inside obj"; 
    return function internalFoo() { 
     var x3 = "inside internalFoo"; 
     console.log (x1+','+x2+','+x3); // get the scopes 
    }; 
})(); 
foo(); 

e l'impostazione di un punto di interruzione sulla console.log, compaiono i seguenti scopi:

Scope Variables seen in Chrome Debugger

c'è qualche mezzo per fare questo al livello di programmazione?
Come è possibile verificare ciò che è definito a tutti i livelli di portata?

risposta

5

Sono (carino) sicuro che questo non è possibile.
Neanche il debugger di Chrome tiene traccia dello scope in ogni momento, ma solo quando raggiunge un punto di interruzione. Tenere traccia della catena dell'ambito per tutto il tempo costerebbe troppa memoria (a seconda della complessità delle chiusure e dei contesti). Vedere questo richiesta di funzionalità per ulteriori informazioni: https://groups.google.com/forum/#!topic/google-chrome-developer-tools/wKEMpKjXR7s

ECMA 262 (10.3.1) descrive come Identifier risoluzione è da fare, la parte più importante di questo è di chiamare GetIdentifierReference (lex, name, strict) che è descritta in ECMA 262 (10.2.1). Per quanto ne so, non esiste alcun comando in qualsiasi implementazione di ECMAScript per chiamare questa funzione in fase di runtime.

Tuttavia, la domanda this (o per essere precisi è la risposta) potrebbe essere interessante in quanto si avvicina almeno a ciò che hai chiesto.

Problemi correlati