Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 07.05.2011, 19:31
Интересующийся
Отправить личное сообщение для Flirer Посмотреть профиль Найти все сообщения от Flirer
 
Регистрация: 19.12.2009
Сообщений: 11

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


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

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. Может кто сталкивался с таким бредом, или я дурак какую-то простую ошибку не вижу?
Ответить с цитированием
  #2 (permalink)  
Старый 07.05.2011, 20:19
Особый гость
Посмотреть профиль Найти все сообщения от monolithed
 
Регистрация: 02.04.2010
Сообщений: 4,260

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

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

foo(10);
alert(obj.array)

Последний раз редактировалось monolithed, 07.05.2011 в 20:22.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск