Aunque todos responden " No " y sé que "No" es la respuesta correcta, pero si realmente necesita obtener variables locales de una función, hay una forma restringida.
Considere esta función:
var f = function() {
var x = 0;
console.log(x);
};
Puede convertir su función en una cadena:
var s = f + '';
Obtendrá fuente de función como una cadena
'function () {\nvar x = 0;\nconsole.log(x);\n}'
Ahora puede usar un analizador como esprima para analizar el código de función y encontrar declaraciones de variables locales.
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);
y encontrar objetos con:
obj.type == "VariableDeclaration"
en el resultado (he eliminado a console.log(x)continuación):
{
"type": "Program",
"body": [
{
"type": "VariableDeclaration",
"declarations": [
{
"type": "VariableDeclarator",
"id": {
"type": "Identifier",
"name": "x"
},
"init": {
"type": "Literal",
"value": 0,
"raw": "0"
}
}
],
"kind": "var"
}
]
}
He probado esto en Chrome, Firefox y Node.
Pero el problema con este método es que solo tiene las variables definidas en la función misma. Por ejemplo para este:
var g = function() {
var y = 0;
var f = function() {
var x = 0;
console.log(x);
};
}
solo tienes acceso a la xy no a la y . Pero aún puede usar cadenas de llamador (argumentos.callee.caller.caller.caller) en un bucle para encontrar variables locales de las funciones del llamador. Si tiene todos los nombres de variables locales, entonces tiene variables de alcance . Con los nombres de las variables tiene acceso a los valores con una evaluación simple.