Локальные переменные как массив
Добрый день!
Подскажите, пожалуйста, можно ли сделать на 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, время: 22:22. |