我正在使用javascript eval()。由于某种原因,它会导致错误,所以我将替换所有eval。我已经取代了这个
var abc = "item." + str3 + ".power";
abc = eval(abc);
与
var abc = item[str3]["power"];
但我不明白如何更换这两个陈述?
1) setTimeout(eval(reloadfunction), 180000);
2) buttonrow = buttonrow + eval(button)(i, item);
reloadfunction是一个变量,它获取一些字符串值,这是一个函数名。 button是一个变量,它获取一些字符串值并将其作为函数执行,并传递“i”和“item”作为其他变量。
答案 0 :(得分:4)
如果您正在处理的变量和函数是全局的(即在全局范围内定义),那么您可以使用window[reloadfunction]
和window[button](i,item)
。
但是,如果它们是本地范围的,则必须完全重构代码以使其具有类似函数的映射:
var functions = {
func1: function() {doSomething();},
func2: function() {doSomethingElse();}
};
setTimeout(functions[reloadfunction],180000);
答案 1 :(得分:2)
我会用这个:
setTimeout( new Function(reloadfunction) , 180000);
因为它在自己的范围内运行。 (不是全球的,不是现在的,而是它自己的)
P.S。你也可以设置上下文:
new Function(reloadfunction).apply(t,[])
//立即执行
new Function(reloadfunction).bind(t,[])
//将来执行(通知ie => 9)
评论:这是一个例子: