Показать сообщение отдельно
  #6 (permalink)  
Старый 18.12.2012, 16:11
Аватар для cib
cib cib вне форума
Интересующийся
Отправить личное сообщение для cib Посмотреть профиль Найти все сообщения от cib
 
Регистрация: 11.12.2012
Сообщений: 16

Отвечаю по порядку:
1. таймаут нужен для того, чтобы периодически непрерывно вызывать func1, причем время таймаута не фиксированное, а может меняться.
2. Единственное условие завершение периодичного вызова самой себя - уход со страницы (перезагрузка). Поэтому setTimeout должен вызываться в любом случае, поэтому он вынесен из if-else. Да и вообще в данном случае таймаут никак не может повлиять на работу, потому что работает это так:
1. func1 выполняет свой код
2. func1 планирует сама себя на выполнение через N ms
3. ничего не происходит N ms
4. func1 выполняет свой код
5. func1 планирует сама себя на выполнение через M ms
6. ничего не происходит M ms
и т.д. пока юзер не уйдет с сайта. Учитывая, что условие в for проверяется при каждой итерации цикла (и писать 'i < _Item.length' вообще говоря муветон с точки зрения производительности), а _Items является локальной переменной func1 и нигде за ее пределами в других потоках не меняется, то таймаут тут ну вообще ни при чем.
Но всё это (пп.1-2) не касается проблемы как таковой, потому что: а) похожий цикл for чуть ранее в some code #1 работает нормально, и б) см.п.3 и P.S.
3. описаное безобразие происходит при первом входе в функцию, т.е. цикл for сходит с ума в первый же раз, и только потом вызывается таймаут, т.о. он никак не влияет на выполнение func1 в первую итерацию.
4. Sanda, _Items - массив "объектов", содержащих 4 текстовых поля, в т.ч. ID ( например, { 'ID1', 'Field1', 'Field2', 'Field3' } ), которые добавляются в массив банальным push(). Я пробовал вместо _Item.lеngth передавать туда уже готовое значение и вообще писать руками цифру. Толку ноль.

Причинно-следственная связь простая:
причина - условие i < _ic не срабатывает при i==2 и _ic==2
следствие - statement крэшится и мы теряем some code#2

P.S. попробовал вместо '_ic' в условиях написать тупо '2'
for( var i = 0; i < 2; i++ ( {
   //бла-бла
}

Не помогло. Цикл по прежнему прется на третью итерацию и крешится.
Ответить с цитированием