JavaScript setInterval fonctionne immédiatement

J'ai trouvé une solution pour exécuter l'intervalle en javascript immidiatement, n'attendant pas un premier "timeout"

setInterval(function hello() { console.log('world'); return hello; }(), 2500); 

Mais le problème est que cette solution ne fonctionne pas, c'est une construction comme celle-ci

 (function () { window.Banner = { doMagic: function () { setInterval(function magic() { console.log('magic'); return magic; }, 2500); } } })(); Banner.doMagic(); 

J'ai essayé de renvoyer la méthode de Bannière, de le nommer et de revenir et pas de succès. Le point est ce qui, dans la construction réelle, est beaucoup plus complexe, alors je ne peux pas le réécrire pour «retourner la solution SetTimeout», comme cela a été largement diffusé, de sorte qu'il serait vraiment parfait de trouver ce que je fais mal avec celui-ci.

Http://jsfiddle.net/5jawxLnr/3/

Peut-être la façon la plus appropriée de le faire serait de prendre tout le rappel en dehors de l'appel setInterval et de le placer dans une variable distincte:

 (function () { window.Banner = { doMagic: function () { var magic = function() { console.log('magic'); }; setInterval(magic, 2500); magic(); } } })(); Banner.doMagic(); 

L'effet est le même que votre premier code, mais de cette façon votre code est un peu plus propre.

Vous n'êtes plus autorisé à exécuter la fonction dans votre 2ème extrait de code. Vous devez modifier ceci pour ce qui suit:

 doMagic: function () { setInterval(function magic() { console.log('magic'); return magic; }(), 2500); } 

Cependant, je suis d'accord avec les autres, ce n'est pas le moyen le plus propre de le faire et n'est pas très évident pour le prochain développeur qui arrive. Je recommande de mémoriser la fonction dans une variable, l'exécuter immédiatement et l'exécuter dans l' setInterval aussi:

 doMagic: function () { var magic = function magic() { console.log('magic'); return magic; } magic(); setInterval(magic, 2500); } 

Dans votre code, il n'y a aucun moyen d'effectuer la tâche requise, à la place, suivre l'approche ci-dessous:

 // Use function to perform the task. function doTask () { console.log("..."); } // Perform task for the first time. doTask(); // On interval do task. setInterval(doTask, 2500); 

Si vous ajoutez les parenthèses à la partie de code ci-dessous,

  doMagic: function () { setInterval(function magic() { console.log('magic'); return magic; }(), 2500); // added them here } 

Essayez cet exemple

 var hello = function() { document.write('hello... '); }; setInterval(hello, 1000); hello();