Cytat(nospor @ 25.05.2011, 10:22:31 )

No to nie pokazujesz w takim razie całego kodu bo to ci podałem działa bez problemu
zadziała bez problemu ale tylko i wyłącznie wtedy, gdy funkcja loop jest zdefiniowana w globalnym zasięgu (czyli pod window), jeśli jednak funkcja jest zagnieżdżona niżej ten sposób nie zadziała (i wtedy window.loop jest nie zdefiniowany ;] - inna sprawa, że pisze samo loop) - poza tym tą metodę nazwałbym niejawnym używaniem eval'a...
na szybko wystarczyło, jeśli wywołanie obudował by w funkcję anonimową
i nie jako tekst:
setTimeout(function(){loop( iHowMany );},1000);
jednak jeśli gdzieś dalej on operuje na zmiennej iHowMany a nie chciał, by się zmieniała powinien tą zmienną przekazać jako parametr - czasami na dynamicznym sterowaniu można podmieniać i definicje metod/funkcji - więc funkcję też można przekazać dla pewności przez callback jeśli jej definicja ma się nie zmieniać:
setTimeout(
(function(callback, arg1){
return function(){callback(arg1);callback = arg1 = null;};
})(loop, arg1)
,1000
);
przypisanie zmiennych do null'a callback = arg1 = null; nie jest konieczne aczkolwiek lepiej zerować nie potrzebne zmienne ze znikającego zasięgu by zapobiec wyciekowi pamięci w niektórych przeglądarkach...
wszystko też zależy, gdzie dana zmienna jest zdefiniowana, od zasięgu i od tego, czy funkcja przyjmuje argumenty - jeśli nie przyjmuje argumentów a operuje na zmiennych z wyższego poziomu to równie dobrze można zapisać bez cudzysłowia:
Kod
setTimeout(callback, 1000);
wszystkie powyższe przypadki są szybsze od niejawnego eval'a i dają możliwość operowania na zagnieżdżonych zmiennych i funkcjach...