Embora todos respondam " Não " e eu saiba que "Não" é a resposta certa, mas se você realmente precisar obter variáveis locais de uma função, existe uma maneira restrita.
Considere esta função:
var f = function() {
var x = 0;
console.log(x);
};
Você pode converter sua função em uma string:
var s = f + '';
Você obterá a fonte da função como uma string
'function () {\nvar x = 0;\nconsole.log(x);\n}'
Agora você pode usar um analisador como o esprima para analisar o código de função e encontrar declarações de variáveis locais.
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 encontre objetos com:
obj.type == "VariableDeclaration"
no resultado (removi console.log(x)abaixo):
{
"type": "Program",
"body": [
{
"type": "VariableDeclaration",
"declarations": [
{
"type": "VariableDeclarator",
"id": {
"type": "Identifier",
"name": "x"
},
"init": {
"type": "Literal",
"value": 0,
"raw": "0"
}
}
],
"kind": "var"
}
]
}
Eu testei isso no Chrome, Firefox e Node.
Mas o problema com esse método é que você apenas tem as variáveis definidas na própria função. Por exemplo, para este:
var g = function() {
var y = 0;
var f = function() {
var x = 0;
console.log(x);
};
}
você apenas tem acesso ao x e não ao y . Mas ainda assim você pode usar cadeias de chamador (argumentos.callee.caller.caller.caller) em um loop para encontrar variáveis locais das funções de chamador. Se você tiver todos os nomes de variáveis locais, terá variáveis de escopo . Com os nomes das variáveis, você tem acesso aos valores com uma avaliação simples.