2011-07-03 69 views
2

我在學習如何在javacript for循環中將參數傳遞給setTimeout。這是示例代碼。正如它目前所寫的,每次setTimeout傳遞的都是同樣的數字,而不是反映實際在數組中的不同i。將參數傳遞給for循環中的setTimeout

var a=100; 
for (i in array) 
{ 
    setTimeout("do_stuff(i, a)"), 2000);  
} 

(我見過有些類似的問題和答案在這裏,但代碼示例要複雜得多。要回答這個最基本的例子可以多幫助其他有同樣的問題。謝謝!!!)

+1

請注意'for(x in y)'不符合您的期望,並且不能用於迭代數組 –

+0

@then:您似乎失去了您的帳戶訪問權限並創建了新的帳戶 - 標誌這爲主持人合併您的帳戶。然後你可以接受最好的答案。 –

回答

5

使用字符串(你不應該這樣做),你倒是需要這樣做:

var a=100; 
for (i in array) 
{ 
    setTimeout("do_stuff(" + i + ", a)"), 2000);  
} 

一個更好的答案會是範圍i變量在一個新的函數調用,它返回一個不久ymous函數給予setTimeout()

function do_stuff(i, a) { 
    return function() { 
     // do something with i and a 
    } 
} 

var a=100; 
for (i in array) 
{ 
    setTimeout(do_stuff(i , a), 2000);  
} 

現在do_stuff()回報有一個範圍的參照新ia變量的函數。由於每個do_stuff的調用都有其自己的範圍,因此您返回的函數將引用正確的值。


編輯:題外話,但如果array實際上是一個Array,那麼你真的不應該使用for-in,因爲這意味着枚舉。對於數組,您通常需要迭代的數字索引,因此應使用標準的for循環。