在javascript中替换eval()的正确方法是什么?

时间:2014-03-10 14:45:36

标签: javascript jquery eval

我正在使用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”作为其他变量。

2 个答案:

答案 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)

评论:这是一个例子:

enter image description here