2010-09-03 98 views
2

我想弄清楚如何在for循環中生成函數。 我有:JavaScript for循環,函數中的索引變量

for (var i = fir_0_f.length - 1; i >= 0; i--){ 
    var next = i+1; 
    var N = i; 
    // Attemps 
     //goal0_[i](next,N); 
     //eval('goal0_'+i+'('+next+', '+N+')'); 
}; 

也做了一些搜索。 []需要一個字符串,eval()是一個B.A.D練習。有沒有其他方法? 如何爲以後的每個功能設置超時?所以他們會順序運行?

非常感謝!

+0

你能告訴其中函數定義的代碼?改變這可能會簡化事情。 – sje397 2010-09-03 10:34:20

回答

1
for (var i = fir_0_f.length - 1; i >= 0; i--){ 
    var next = i+1; 
    var N = i; 
    setTimeout('goal0_'+i+'('+next+','+N+')', 0); 
} 

注:錯誤的goal0_ 不會被環路捕獲拋出。 我注意到了Firefox中的這種行爲。 這意味着,如您所願以下將不起作用:

try{ 
    setTimeout(function_throwing_error, 0); 
} 
catch(e){ 
    alert("I kill you!"); 
} 
0

對於全局的功能,你可以這樣做:在你的循環,你可以簡單地

var goals = []; 

goals.push((function (param1, param2) { 
    // your code for the first function 
})); 

goals.push((function (param1, param2) { 
    // your code for the second function 
})); 

// ... etc 

然後:

window['goal0_'+i](next, N); 
4

在JavaScript中,你可以使用函數表達式來建立一個函數數組引用你的函數作爲一個數組的元素:

goals[i](next, N); 

UPDATE:

要相互調用你的函數,你必須改變你的循環邏輯。不要使用for循環,請立即調用第一個函數,然後在運行後使用setTimeout()調用第二個函數。

+0

好主意。那麼如何在for循環中使用超時運行每個函數?首先會立即執行,其他人會超時。 – c4rrt3r 2010-09-03 10:45:46

+0

@ c4rrt3r:更新了我的回答,並對超時發表評論。 – 2010-09-03 12:03:05