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, время: 11:52. |