2010-03-03 64 views
1

我第一次遇到了野生動物園,這裏設定的時間間隔將表現unpredicatbly當函數名稱報價中沒有被封閉(並選擇將其添加了括號接縫)一個問題:JavaScript的Mac的火狐的setInterval()Wierdness

repeatInterval = setInterval("foo()", 50); 

在將我的代碼更改爲以這種方式進行讀取時,它會在Firefox的Mac版本中根本無法執行。

我做了一些進一步的測試,確保它在linux和windows版本(包括Windows下的3.0.10和3.6)下都能夠完全正常工作。引發這個問題的唯一組合是Mac OS X Snow Leopard上的Firefox(本例中爲3.6)。

它沒有作用可言,除非寫成如下格式:

repeatInterval = setInterval(foo, 50); 

是否有sollution這個問題將在其他所有瀏覽器和Firefox在Mac上工作,沒有測試操作系統和瀏覽器中的JavaScript和黑客它相應地工作?

回答

3

不要傳遞字符串作爲setIntervalsetTimeout的第一個參數。您應該傳遞一個函數標識符(如您對setInterval(foo, 50);所做的那樣)或傳遞一個匿名函數(使用關鍵字function)。

+0

它接觸到所有瀏覽器確實可以處理這種方法:'setInterval(foo,50)'其他地方的一個問題正在扭曲我對特定問題源頭的理解。我假定'setInterval'就像一個對象,如果它的唯一引用'repeatInterval'被一個新的'setInterval'覆蓋,它將被覆蓋。我在分配'repeatInterval'之前運行'clearInterval(repeatInterval)'來解決這個問題。 –

+0

'setInterval'是一個函數,它返回一個句柄 - 你真的只用它來稍後取消這個間隔。這聽起來像你瞭解現在的用法。 –

+0

謝謝,無論如何,它有助於聽取某人的意見,以獲得文件哪些部分更廣泛的一種擔憂。 –