SetTimeout не принимает параметр при повторном вызове
Привет всем,
Задача скрипта запуск функции до появления определенных условий.
function onemenu()
{
var onemenu = new Array ("czero", "cone","ctwo")
return onemenu
}
var array_one = onemenu()
menuup(array_one)
function menuup(menu_array)
{
for (i= flag1; i<=menu_array.length; i++)
{
anim(i)
flag1 ++
break
}
if (flag1 <= menu_array.length)
{
var set_timeout = 'menuup(' + menu_array + ')'
setTimeout(set_timeout, 1000)
}
else {
flag1 = 0
}
}
Так вот при повторном вызове SetTimout не передает список array_one. :(( Буду благодарен, если кто-нибудь мне поможет с этим разобраться. |
Вместо setTimeout(set_timeout, 1000), поставьте alert(set_timeout) и посмотрите, что выведется.
|
Ставил, в первый раз все нормально выводит все элементы списка, а во второй раз [object].
|
function onemenu()
{
var onemenu = new Array ("czero", "cone","ctwo")
return onemenu
}
var array_one = onemenu()
menuup(array_one)
function menuup(menu_array)
{
for (i= flag1; i<=menu_array.length; i++)
{
anim(i)
flag1 ++
break
}
if (flag1 <= menu_array.length)
{
setTimeout(function(){menuup(menu_array)}, 1000)
}
else {
flag1 = 0
}
}
|
Работает!!!
Если нетрудно, теперь можно объяснить в чем сакраментальная разница между setTimeout(set_timeout,1000) и setTimeout(function(){menuup(menu_array)}, 1000)? Спасибо за помощь. |
сакраментальная разница в передаче параметров:
- в первом случае ф-ии set_timeout не передается ничего, - во втором случае благодаря замыканию передается массив menu_array. P.S. Kolyaj, для интереса выполнил
setTimeout(function(){console.info(arguments)},1)
выдает то [-10], то [5]. Интересно, что передается? |
Спасибо за ответ, буду разбираться.
|
Цитата:
|
Цитата:
|
А если серьезно, я плохо представляю, что и где вы выполнили.
|
Да хоть в консоли фаербага, как написано выше, хоть в адресной строке:
javascript:setTimeout(function(){alert(arguments[0])},1);void(0)
В фаерфоксе выдает массив, содержащий то 5, то -10. В опере и ие - ожидаемо, undefined. |
setTimeout(function(){alert(arguments[0])},1,'FF have third argument');
|
ну не только ФФ конечно же :)
|
ZoNT,
Опера 9.64 тоже "have third argument" ;) Ну хорошо, передача параметров это круто и хорошо, а откуда тогда недетерминированные параметры в моем случае? |
оттуда, что не слишком корректно работает ФФ с аргументами в данном случае... Видимо берёт мусор из памяти или ещё чего. У меня выскакивало без указания третьего параметра -4, 0, 1...
|
Да, вполне возможно. Набор возможных значений зависит от величины таймаута, кстати :)
|
| Часовой пояс GMT +3, время: 06:39. |