我看到this question執行功能,我不知道這有什麼問題嗎?的setTimeout與參數
var id = 12;
setTimeout(showGrid ('i want to pass variable ' + id + ' here'), 5000);
我看過這個問題,我對上面的代碼不是一個好的解決方案感興趣。我只安裝了Chrome瀏覽器,我已經嘗試過了,它可以正常工作。是否有任何瀏覽器問題?
爲什麼匿名函數更好?
我看到this question執行功能,我不知道這有什麼問題嗎?的setTimeout與參數
var id = 12;
setTimeout(showGrid ('i want to pass variable ' + id + ' here'), 5000);
我看過這個問題,我對上面的代碼不是一個好的解決方案感興趣。我只安裝了Chrome瀏覽器,我已經嘗試過了,它可以正常工作。是否有任何瀏覽器問題?
爲什麼匿名函數更好?
你可以使用一個封閉:
var id = 12;
setTimeout(function() {
showGrid('i want to pass variable ' + id + ' here');
}, 5000);
而且這裏有一個live demo。
編輯(蘆粟)從註釋:
的setTimeout函數需要一個回調或字符串變量。你沒有傳遞這樣的東西,所以你的代碼無效。您直接調用showGrid函數,而不是它應該如何工作。 ShowGrid函數應該僅在5秒鐘後調用。
setTimout
期望的功能作爲它的第一個參數和一個時間作爲第二個參數,則可選的參數傳遞給該函數。所以,如果你有一個函數:
function showGrid(str) {
return str;
}
,你有以下setTimeout
:
setTimeout(showGrid("..."), 5000);
那麼您呼叫showGrid
和返回值傳遞給setTimeout
,所以它最終是這樣的:
// "..." is returned from showGrid("...")
setTimeout("...", 5000);
和"..."
不是功能。所以有兩種方法可以解決這個問題,你可以創建一個圈套(如Darin的答案),或者在時間之後添加參數。
setTimeout(function() {
showGrid("...");
}, 5000);
// same thing
setTimeout(showGrid, 5000, "...");
Becareful。它不適用於所有IE版本,這就是爲什麼使用返回另一個函數的函數更好。這比傳遞字符串還要好,因爲eval可能是不安全的。 – 2011-12-31 16:57:11
var id = 12;
setTimeout("showGrid ('i want to pass variable " + id + " here')", 5000);
,第一參數字符串,就像你會傳遞給eval
功能是什麼。
,並注意小o
在setTimeout
你可以把它關閉。還是它alreadt – 2011-12-31 16:22:18
好吧,但爲什麼這是更好?其他代碼片段有什麼問題? – Bakudan 2011-12-31 16:29:16
@Milo,其他代碼片段?在你的問題中顯示的那個?如果是,則問題中顯示的代碼段不起作用。 – 2011-12-31 16:29:36