Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Локальные переменные как массив (https://javascript.ru/forum/misc/41125-lokalnye-peremennye-kak-massiv.html)

lacinho 01.09.2013 13:49

Локальные переменные как массив
 
Добрый день!

Подскажите, пожалуйста, можно ли сделать на Javascript так, чтобы получить доступ к локальным переменным, объявленным внутри некой функции как к именованному массиву некоей системной переменной, т.е. можно ли сделать рабочим, например, такой код:
function test() {
 var a, b, c;
 for (var internalVariable in test.variables) alert(internalVariable);
}


В данном коде объект test.variables является вымышленным, и по-идее должен быть заменен на некую ссылку в пространстве имен функции test.

Dmitriyff 01.09.2013 14:04

function test() {
  test.variables = { a: 1, b: 2, c: 3};
  for (var internalVariable in test.variables) alert(internalVariable);
}

lacinho 01.09.2013 14:28

Спасибо за ответ, но так я уже умею, и это не совсем то, что мне хотелось бы получить.
Нужно, чтобы массив содержал переменные объявленные именно так, как в моем примере, через var по одной, а вызвать их потом общим системным массивом. По аналогии window.имя для глобальных переменных.

Яростный Меч 01.09.2013 19:31

По сабжу: никак.

А зачем это понадобилось?

lacinho 01.09.2013 21:21

Никак нельзя, да?... Жаль(((
А понадобилось это вот зачем: есть у меня одна функция в которой есть много переменных, эта функция уже почти написана, и в ней широко используются эти переменные как простые переменные, а теперь мне нужно все эти величины передать как аргументы в другую внешнюю функцию, на которую будут ссылаться и другие функции, и в этой новой функции будут выполнены некоторые операции над этими переменными и их нужно вернуть в вызывающую функцию. Все это требует упаковывать в объект, а потом распаковывать, просто подумал, мож можно эти операции через цикл-массив провести, но жаль, что так просто и красиво не получается(((

Яростный Меч 02.09.2013 00:00

Цитата:

Сообщение от lacinho
функция уже почти написана, и в ней широко используются эти переменные как простые переменные

идея в наброске:
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/

lacinho 02.09.2013 01:29

Какое изящное получилось решение. Это действительно работает и делает все как нужно! Да, самому бы мне до такого не дойти было, да и искал, как получается, немного в другом направлении))

Что-ж, весьма благодарен, огромное Вам спасибо!

ruslan_mart 02.09.2013 05:34

function test(a, b, c, d) {
   a = 1;
   b = 11;
   c = true;
   d = 'Hello';
   
   alert(arguments);
}

test();


Часовой пояс GMT +3, время: 23:54.