2013-04-01 2 views
3

Я выполняю javascript файлы в node.js, и мне нужно получить доступ ко всем переменным, которые были созданы в этом файле. Поскольку эти файлы javascript могут содержать что угодно, в зависимости от контекста разработчика, мне нужно обращаться к переменным программно.Как получить переменные, которые были созданы внутри функции?

Мой вопрос: Как получить переменные, которые были созданы внутри функции? Что-то вроде этого:

function test(){ 
    var a = 'hello world'; 
    var b = 100; 
} 

console.log(test.variables); 
// -> { "a": 'hello world', "b": 100 } 

Возможно ли это как-то?

+1

Какова цель? – ValeriiVasin

+0

Я выполняю javascript-файлы в node.js, и мне нужно получить доступ ко всем переменным, которые были созданы в этом файле. Поскольку эти файлы javascript могут содержать что угодно, в зависимости от контекста разработчика, мне нужно обращаться к переменным программно. – Adam

ответ

0

Возможно ли это как-то?

Нет - не без изменения функции.

+0

Что вы имеете в виду, изменяя функцию? – Adam

+0

Я имею в виду буквально изменить исходный код функции, чтобы он делал что-то другое. Например, ответ на сладкую амилазу демонстрирует одно жизнеспособное изменение. –

+0

и какие изменения вы бы сделали? – Adam

4

Нет, вам нужно вернуть эти значения в объект.

function test(){ 
    var a = 'hello world', 
     b = 100; 
    return { 
     a: a, 
     b: b 
    }; 
} 

console.log(test); // { "a": 'hello world', "b": 100 } 

Или вы можете сохранить эти значения в переменную, которая существует вне области видимости функции:

var variables = null; 
function test(){ 
    var a = 'hello world', 
     b = 100; 
    variables = { 
     a: a, 
     b: b 
    }; 
} 
console.log(variables); // { "a": 'hello world', "b": 100 } 
+0

А что, если я не знаю названия имен переменных? Есть ли способ получить имена переменных программно изнутри функции? – Adam

+0

@Adam Невозможно. Вы должны явно назначить переменные, которые вы хотите. В любом случае вам придется изменить функцию. – sweetamylase

+0

Это действительно возможно с 'eval' и' vm' модулем node.js, но проблема с eval заключается в том, что он получает все из глобального контекста, но мне нужен только локальный контекст. Почти то же самое с проблемой с vm. – Adam

Смежные вопросы