Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Массив, созданый в функцие не доступен нигде кроме тела функции (https://javascript.ru/forum/misc/17144-massiv-sozdanyjj-v-funkcie-ne-dostupen-nigde-krome-tela-funkcii.html)

Flirer 07.05.2011 19:31

Массив, созданый в функцие не доступен нигде кроме тела функции
 
Зравствуйте. Столкнулся со странной проблемой:


В начале скрипта задаётся массив:

var calend = new Object;

calend.events = new Array();


после этого идёт подключение к XML файлу, данные передаются в эту функцию:

function ParseXML(Response) {
	calend.doc = Response.responseXML.documentElement;
	var events = calend.doc.getElementsByTagName("event");
	
	var name, link, icon, img;
	
	for (var i=0;i<events.length;i++) {
		name = events[i].getElementsByTagName("name")[0].firstChild.nodeValue;
				
		calend.events[i] = new Array();
		calend.events[i]["name"] = name;
		
	}
	
}


элемент calend.events[n] - недоступен за пределами функции. Если я сделаю

alert(calend.events[0]["name"]);


в parseXML то отоброзится ожидаемой содержимое из XML файла. Но если тоже самое набрать вне функции то cant read property 'name' of undefined...

при этом другие параметры calend которые используются в других местах работают нормально.

Совсем задолбавшись сделал простой пример:

var calendar = new Object();
calendar.events = new Array();
addArray(calendar.events);
addArray(calendar.events);
addArray(calendar.events);

function addArray(array) {
	array[array.length] = new Array(array.length+array.length, array.length+array.length*array.length+array.length);
}

alert(calendar.events[3]);


работает как надо, массив calendar.events доступен из любого места...

Не работает в последнем хроме и firefox. Может кто сталкивался с таким бредом, или я дурак какую-то простую ошибку не вижу?

monolithed 07.05.2011 20:19

Для размышления:
var obj = {
    array : []
},

foo = function(i) {
    while(i--) {
        obj.array[i] = i;
    }
    return obj.array;
};

foo(10);
alert(obj.array)


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