Локальные переменные как массив
Добрый день!
Подскажите, пожалуйста, можно ли сделать на Javascript так, чтобы получить доступ к локальным переменным, объявленным внутри некой функции как к именованному массиву некоей системной переменной, т.е. можно ли сделать рабочим, например, такой код:
function test() {
var a, b, c;
for (var internalVariable in test.variables) alert(internalVariable);
}
В данном коде объект test.variables является вымышленным, и по-идее должен быть заменен на некую ссылку в пространстве имен функции test. |
function test() {
test.variables = { a: 1, b: 2, c: 3};
for (var internalVariable in test.variables) alert(internalVariable);
}
|
Спасибо за ответ, но так я уже умею, и это не совсем то, что мне хотелось бы получить.
Нужно, чтобы массив содержал переменные объявленные именно так, как в моем примере, через var по одной, а вызвать их потом общим системным массивом. По аналогии window.имя для глобальных переменных. |
По сабжу: никак.
А зачем это понадобилось? |
Никак нельзя, да?... Жаль(((
А понадобилось это вот зачем: есть у меня одна функция в которой есть много переменных, эта функция уже почти написана, и в ней широко используются эти переменные как простые переменные, а теперь мне нужно все эти величины передать как аргументы в другую внешнюю функцию, на которую будут ссылаться и другие функции, и в этой новой функции будут выполнены некоторые операции над этими переменными и их нужно вернуть в вызывающую функцию. Все это требует упаковывать в объект, а потом распаковывать, просто подумал, мож можно эти операции через цикл-массив провести, но жаль, что так просто и красиво не получается((( |
Цитата:
function func1(obj) {
// в объекте переменные из main
// их можно перечислить.
obj.a = 5;
obj.b = 6;
}
function main() {
// объявили переменные
var vars = {
a: null,
b: null,
c: null
};
with(vars) {
// здесь офигительная логика с переменными
a = 'test';
c = 222;
console.log(vars);
// вызов внешней функции, передача набора переменных
func1(vars);
console.log(vars);
}
}
main();
http://jsfiddle.net/MhqtH/ |
Какое изящное получилось решение. Это действительно работает и делает все как нужно! Да, самому бы мне до такого не дойти было, да и искал, как получается, немного в другом направлении))
Что-ж, весьма благодарен, огромное Вам спасибо! |
function test(a, b, c, d) {
a = 1;
b = 11;
c = true;
d = 'Hello';
alert(arguments);
}
test();
|
| Часовой пояс GMT +3, время: 15:18. |