2015-09-23 60 views
1

我找到了解決immidiately運行在javascript區間,而不是等待第一個「超時」的JavaScript的setInterval立即運行

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

但問題是這樣的解決方案是不工作是建設這樣

(function() { 
    window.Banner = { 

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

Banner.doMagic(); 

我試着返回Banner方法,命名它並返回並且沒有成功。 要點是在實際建設中要複雜得多,所以我不能只是將它重寫爲「返回setTimeout」解決方案,因爲它提供了廣泛的,所以它會非常完美地找到我在做這個錯誤。

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

+0

如果您想要跳過第一個區間,創建一個閉包。所以,它看起來像這樣:'setTimeout(function hello(){return function(){[code here]};}(),250);' –

回答

4

也許最恰當的方式來做到這一點會可以在setInterval調用之外進行整個回調,並將其置於一個單獨的變量中:

(function() { 
    window.Banner = { 

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

Banner.doMagic(); 

效果與您的第一個代碼相同,但這樣您的代碼就會更清晰一些。

1

在你的代碼是沒有辦法來執行所需的任務,而不是按照下面的方法:

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

3

您不再在第2個代碼片段中自行執行該功能。您需要將此更改爲以下:

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

我與其他人同意,雖然,這是不是這樣做最徹底的方法,是不是誰出現的下一個開發人員非常明顯。我建議存儲功能在一個變量,立即執行,然後在setInterval也運行它:

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

如果括號添加到下面的代碼部分它

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

試試這個例子

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