我正在试图弄清楚如何在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 :(得分:4)
在JavaScript中,您可以使用函数表达式来构建函数数组:
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
然后在你的for循环中,你可以简单地将你的函数作为数组的元素引用:
goals[i](next, N);
<强>更新强>
要在彼此之间延迟调用函数,您必须更改循环逻辑。不要使用for
循环,而是立即调用第一个函数,然后在运行之后,使用setTimeout()
调用第二个函数。
答案 1 :(得分: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_ i 引发的错误。 我在Firefox中注意到了这种行为。 这意味着以下内容无法按预期工作:
try{
setTimeout(function_throwing_error, 0);
}
catch(e){
alert("I kill you!");
}
答案 2 :(得分:0)
对于全局函数,您可以这样做:
window['goal0_'+i](next, N);