Sebbene tutti rispondano " No " e so che "No" è la risposta giusta, ma se hai davvero bisogno di ottenere variabili locali di una funzione c'è un modo limitato.
Considera questa funzione:
var f = function() {
var x = 0;
console.log(x);
};
Puoi convertire la tua funzione in una stringa:
var s = f + '';
Otterrai l'origine della funzione come stringa
'function () {\nvar x = 0;\nconsole.log(x);\n}'
Ora puoi usare un parser come esprima per analizzare il codice funzione e trovare dichiarazioni di variabili locali.
var s = 'function () {\nvar x = 0;\nconsole.log(x);\n}';
s = s.slice(12); // to remove "function () "
var esprima = require('esprima');
var result = esprima.parse(s);
e trova oggetti con:
obj.type == "VariableDeclaration"
nel risultato (ho rimosso di console.log(x)seguito):
{
"type": "Program",
"body": [
{
"type": "VariableDeclaration",
"declarations": [
{
"type": "VariableDeclarator",
"id": {
"type": "Identifier",
"name": "x"
},
"init": {
"type": "Literal",
"value": 0,
"raw": "0"
}
}
],
"kind": "var"
}
]
}
Ho provato questo in Chrome, Firefox e Node.
Ma il problema con questo metodo è che hai solo le variabili definite nella funzione stessa. Ad esempio per questo:
var g = function() {
var y = 0;
var f = function() {
var x = 0;
console.log(x);
};
}
hai solo accesso a xe non a y . Tuttavia, è possibile utilizzare le catene del chiamante (argomenti.callee.caller.caller.caller) in un ciclo per trovare le variabili locali delle funzioni del chiamante. Se hai tutti i nomi delle variabili locali, quindi hai le variabili dell'ambito . Con i nomi delle variabili hai accesso ai valori con una semplice valutazione.