Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Как передать в функцию значение а не ссылку на переменную? (https://javascript.ru/forum/misc/21252-kak-peredat-v-funkciyu-znachenie-ne-ssylku-na-peremennuyu.html)

Ghaniball 02.09.2011 17:21

Как передать в функцию значение а не ссылку на переменную?
 
Введение:

Есть объект mnuctx, из который создаётся другой объект по схеме {"значение" : function(){exec(...)}}

Я делаю так
var mnuctx = xxxxx//не важно
var popupMenuArray = new Object
for (var j = 0; j < mnuctx.length; j++)
{
popupMenuArray[mnuctx[j].text] = function(){execCtxMenu(mnuctx[j], _jwEspRapporti, response_asset)}
}

В конец цикла у всех ключей одинаковые значения(последней итерации)
Внимание вопрос:
Как сделать чтобы передать не j(mnuctx[j]) а значение j(mnuctx[0], mnuctx[1], mnuctx[2],...)?

B@rmaley.e><e 02.09.2011 17:31

Классический пример на замыкания.

Ghaniball 02.09.2011 17:54

Спасибо! А как мне всё это в вышеупомянутом примере внедрить?

ваый 02.09.2011 18:03

Это твоя ситуация:
var obj = [], i;
for (i = 0; i < 5; i++) {
    obj.push(function() {
        alert(i);
    });
}

Как надо:
var obj = [], i;
for (i = 0; i < 5; i++) {
    (function(index) {
        obj.push(function() {
           alert(index);
        });
    })(i)
}

Ghaniball 02.09.2011 18:24

Всё ещё разбираюсь...

Но думаю, я на правильном пути.

Спасибо большое! С утра голову ломаю! : )


Сделал!!!!!!
var popupMenuArray = new Object
for (var j = 0; j < mnuctx.length; j++)
{
	(function(obj){
		popupMenuArray[obj.text] = function(){execCtxMenu(obj,...)}
	})(mnuctx[j])
}


Аж, плакать хочется. Так легко и просто!


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