2011-09-12 87 views

回答

8

你的代碼,因爲的jsfiddle的不執行。它將代碼包裝在一個onload處理程序中,從而使doSomething不在全局名稱空間中。所以當setTimeout試圖執行你的代碼時,它找不到doSomething。更改的jsfiddle執行「無包裝」,一切都很好:http://jsfiddle.net/gilly3/PRff7/3/

如果你不換你來doSomething呼叫字符串,它也將工作,因爲setInterval得到直接引用doSomething這是在同一範圍。它不需要全球參考。

+1

+1爲*解釋*爲什麼它沒有工作。 – user113716

+0

+1找出問題所在 – SLaks

+0

驚人的答案。我一直在用互聯網看到這些例子,我想知道爲什麼這麼多例子都是錯的,這只是因爲它們是jQuery之前的版本。 – Mohammad

2

你應該字符串不傳遞給setInterval

相反,傳遞函數本身:

setInterval(doSomething, 1000); 
+1

的()從DoSomething的刪除。 –

+0

@Daniel:什麼? – SLaks

+0

對不起,他的評論是針對我,我問爲什麼doSomething()不是射擊。 – Mohammad

3

您需要將其更改爲

setInterval(doSomething, 2000); 
function doSomething(){alert('hi')} 
1

如果你想離開你的代碼內聯,而不是將它委託給某個命名的功能(尤其是如果代碼中包含多個命令),使用此:

setInterval(function(){ alert('hi'); alert('hello') }, 2000);