我重複每月的第二個像重複功能執行啓動問題
setInterval(function(){ /* some code */},1000};
什麼,立刻換了這樣的功能將被執行第一次的函數執行,然後重複上每隔1秒,我錯過了任何參數?
我重複每月的第二個像重複功能執行啓動問題
setInterval(function(){ /* some code */},1000};
什麼,立刻換了這樣的功能將被執行第一次的函數執行,然後重複上每隔1秒,我錯過了任何參數?
你可能想聲明的功能,運行它,之後設定的時間間隔:
function something() { /* ... */ } // declare function
something(); // run it now immediately (once)
setInterval(something, 1000); // set an interval to run each second from now on
您可以使用自動執行功能:
(function Fos() {
//do your stuff here
setTimeout(Fos, 1000);
})();
此功能會調用本身,然後設置一個超時在一秒鐘內再次運行。
編輯:再多一點。在我的例子中,我使用了一個命名函數表達式(我使用了名稱「Fos」),它允許我們在函數內部引用函數本身。其他一些示例使用arguments.callee
,它甚至不能在ECMAScript 5嚴格模式下工作,並且現在通常不是推薦的做法。您可以在SO問題中閱讀更多關於它的問題Why was the arguments.callee.caller property deprecated in JavaScript?
nope。你能做的最好的是:
var worker = function() { /* code */ }
worker();
setInterval(worker, 1000)
你可以使用一個稍微不同的模式是這樣的:
(function() {
/*code*/
setTimeout(arguments.callee, 1000);
})()
注意arguments.callee
沒有在嚴格模式下不允許的,所以,你可以這樣做:
var worker = function() {
/*code*/
setTimeout(worker, 1000);
}
worker();
後者兩個代碼示例將創建調用自身執行後1000毫秒的功能。有關使用setInterval()
和setTimeout()
鏈之間的差異(優點/缺點),請參閱this link。
對已經建議的解決方案的其他解決方案是在聲明中返回匿名函數,並在聲明聲明後立即調用該函數。
這樣您不必使用額外的變量,您仍然可以使用由setInterval
返回的間隔ID,這意味着您可以稍後使用clearInterval
來中止它。
例如, http://jsfiddle.net/mqchen/NRQBK/
setInterval((function() {
document.write("Hello "); // stuff your function should do
return arguments.callee;
})(), 1000);
或者只是在函數定義中包含setInterval。 – symcbean
@symcbean:是的,這也是可能的,甚至可能是自我調用功能。 – pimvdb
在你的第二個例子中,你不應該使用'setInterval',你會以很多意想不到的函數調用:)。 – kapa