2010-09-03 87 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