suit: setInterval 1x sofort und dann periodisch ausführen

Ganz blöde Frage: ich hab hier ein kleines Script welches "sofort" und dann alle 10 Sekunden laufen soll:

function foo() {  
    // something  
}  
  
foo();  
setInterval(function() { foo(); }, 10000);

Was mich hier stört ist, dass ich hier eine Funktion schreibe muss, diese Aufrufe und dann mit setInterval nochmal aufrufen muss

Wenn ich das hier mache

setInterval(  
  function() {  
    // something  
  },  
  10000  
);  

habe ich das Problem, dass das erstmalige Ausführen erst nach 10 Sekunden passiert - gibt es hier ggf. etwas, dass ich übersehen habe?

  1. [latex]Mae  govannen![/latex]

    Ganz blöde Frage: ich hab hier ein kleines Script welches "sofort" und dann alle 10 Sekunden laufen soll:

    function foo() {

    // something
    }

    foo();
    setInterval(function() { foo(); }, 10000);

    
    >   
    > Was mich hier stört ist, dass ich hier eine Funktion schreibe muss, diese Aufrufe und dann mit setInterval nochmal aufrufen muss  
      
    Falls die Funktion nicht anderweitig aufgerufen wird, würde ich  
      
    ~~~javascript
    function foo () {  
        // stuff  
        setTimeout(foo, 10000);  
    }  
      
    foo();
    

    schreiben.

    Stur lächeln und winken, Männer!
    Kai

    --
    It all began when I went on a tour, hoping to find some furniture
     Followed a sign saying "Beautiful Chest", led to a lady who showed me her best)
    SelfHTML-Forum-Stylesheet
    1. Falls die Funktion nicht anderweitig aufgerufen wird, würde ich

      Wird sie nicht.

      function foo () {

      // stuff
          setTimeout(foo, 10000);
      }

      foo();

      
      >   
      > schreiben.  
        
      Ich gehe davon aus, dass setTimeout mehr Ressourcen frisst als setInterval - man möge mich eines Besseren belehren :) - in Summe soll dieses Intervall aber nicht 1x gesetzt werden sondern mehrfach - unterm Strich wirds zwar vermutlich egal sein, aber ich stell mir das ungünstig vor wenn das Ding nicht alle 10 Sekunden sondern z.B. alle 125 ms aufgerufen wird (was in meinem Fall nicht zutrifft).
      
      1. [latex]Mae  govannen![/latex]

        Ich gehe davon aus, dass setTimeout mehr Ressourcen frisst als setInterval - man möge mich eines Besseren belehren :)

        Es gab mal irgendwo (ich glaube in comp.lang.javascript) eine Diskussion bezüglich setInterval. Dort wurde angeführt, daß diese Intervalle bzw. die Ausführung der Funktion bei extrem hoher Auslastung gestackt würden und dann wenn die Ressourcen wieder frei würden alle direkt hintereinander ausgeführt würden. Ob das stimmt, jemals gestimmt hat oder nur auf alte JS-Engines zutraf weiß ich nicht mehr, ist einige Jahre her.

        Stur lächeln und winken, Männer!
        Kai

        --
        It all began when I went on a tour, hoping to find some furniture
         Followed a sign saying "Beautiful Chest", led to a lady who showed me her best)
        SelfHTML-Forum-Stylesheet
    2. @@Kai345:

      nuqneH

      Falls die Funktion nicht anderweitig aufgerufen wird, würde ich

      function foo () {

      // stuff
          setTimeout(foo, 10000);
      }

      foo();

      
      >   
      > schreiben.  
        
      Warum nicht gleich so?  
        
      ~~~javascript
      (function foo () {  
          // stuff  
          setTimeout(foo, 10000);  
      }());
      

      Qapla'

      --
      Gut sein ist edel. Andere lehren, gut zu sein, ist noch edler. Und einfacher.
      (Mark Twain)
      1. [latex]Mae  govannen![/latex]

        @@Kai345:

        nuqneH

        Falls die Funktion nicht anderweitig aufgerufen wird, würde ich

        function foo () {

        // stuff
            setTimeout(foo, 10000);
        }

        foo();

        
        > >   
        > > schreiben.  
        >   
        > Warum nicht gleich so?  
        >   
        > ~~~javascript
        
        (function foo () {  
        
        >     // stuff  
        >     setTimeout(foo, 10000);  
        > }());
        
        

        Weil das etwas anderes ist (bzw. sein kann) In deiner Version wird die Funktion direkt von der JS-Engine ausgeführt, man kann den Zeitpunkt nicht beeinflussen. In meinem Fall wird foo() zu einem bestimmten Zeitpunkt (der viel später sein kann, bspw. anhand einer Nutzer) kontrolliert aufgerufen. Daß ich foo() direkt unter der Funktion als Aufruf notiert habe, ist eher exemplarisch anzusehen.

        Stur lächeln und winken, Männer!
        Kai

        --
        It all began when I went on a tour, hoping to find some furniture
         Followed a sign saying "Beautiful Chest", led to a lady who showed me her best)
        SelfHTML-Forum-Stylesheet
        1. @@Kai345:

          nuqneH

          In deiner Version wird die Funktion direkt von der JS-Engine ausgeführt

          Das war suits Anliegen, AFAIS.

          Qapla'

          --
          Gut sein ist edel. Andere lehren, gut zu sein, ist noch edler. Und einfacher.
          (Mark Twain)
          1. In deiner Version wird die Funktion direkt von der JS-Engine ausgeführt

            Das war suits Anliegen, AFAIS.

            Ja, war es :) aber Bedenken gegenüber setTimeout wurden damit nicht zerstreut :)