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

在javascript中替换eval()的正确方法是什么?,javascript,jquery,eval,Javascript,Jquery,Eval,我正在使用javascript。由于某些原因,它会导致bug,所以我将替换所有eval。我换了这个 var abc = "item." + str3 + ".power"; abc = eval(abc); 与 但我不明白如何替换这两种说法 1) setTimeout(eval(reloadfunction), 180000); 2) buttonrow = buttonrow + eval(button)(i, item); reloadfunction是一个变量,它获取作为函数名的字符

我正在使用javascript。由于某些原因,它会导致bug,所以我将替换所有eval。我换了这个

var abc = "item." + str3 + ".power";
abc = eval(abc);

但我不明白如何替换这两种说法

1) setTimeout(eval(reloadfunction), 180000);

2) buttonrow = buttonrow + eval(button)(i, item);
reloadfunction是一个变量,它获取作为函数名的字符串值。
button是一个变量,它获取一些字符串值并作为函数执行,并传递作为其他变量的“i”和“item”。

如果您处理的变量和函数是全局的(即在全局范围内定义的),那么您可以使用
窗口[重新加载函数]
窗口[按钮](i,item)

但是,如果它们是局部作用域,则必须完全重新构造代码,使其具有类似于函数映射的功能:

var functions = {
    func1: function() {doSomething();},
    func2: function() {doSomethingElse();}
};
setTimeout(functions[reloadfunction],180000);

如果您正在处理的变量和函数是全局的(即在全局范围内定义),那么您可以使用
window[reloadfunction]
window[button](i,item)

但是,如果它们是局部作用域,则必须完全重新构造代码,使其具有类似于函数映射的功能:

var functions = {
    func1: function() {doSomething();},
    func2: function() {doSomethingElse();}
};
setTimeout(functions[reloadfunction],180000);
我会用这个:

setTimeout(新函数(重载函数),180000)

因为它在自己的范围内运行。(不是全局的,不是当前的,而是自己的)

p、 您还可以设置上下文:

新函数(重载函数)。应用(t,[])
//立即执行

新函数(重载函数).bind(t,[])
//将来执行(注意ie=>9)

至于评论:以下是一个例子:

我会用这个:

setTimeout(新函数(重载函数),180000)

因为它在自己的范围内运行。(不是全局的,不是当前的,而是自己的)

p、 您还可以设置上下文:

新函数(重载函数)。应用(t,[])
//立即执行

新函数(重载函数).bind(t,[])
//将来执行(注意ie=>9)

至于评论:以下是一个例子:



因为我们不知道什么是
reloadfunction
按钮
,所以很难说。我猜答案是“停止将函数作为字符串编写,而是将它们作为函数编写”。这可能类似于
setTimeout(reloadfunction,180000)“出于某种原因”--这是
eval
的jist。旁注:与
item[str3][“power”]
不同,习惯上写
item[str3]。power
@putvande,可能不是。我敢打赌
reloadFunction()
以字符串形式返回Javascript代码。因为我们不知道
reloadFunction
按钮
是什么,所以很难说。我猜答案是“停止将函数作为字符串编写,而是将它们作为函数编写”。这可能类似于
setTimeout(reloadfunction,180000)“出于某种原因”--这是
eval
的jist。旁注:与
item[str3][“power”]
不同,习惯上写
item[str3]。power
@putvande,可能不是。我愿意打赌
reloadFunction()
以字符串形式返回Javascript代码。我可能错了,但我认为
reloadFunction
不是函数体,而是指向函数的变量。“reloadfunction是一个变量,它获取一些字符串值,这是一个函数名。”我假设它是一个字符串函数,类似于
“alert(1)”
我更新了我的注释以引用该问题。很确定这是一个参考资料。但是,您所说的“在其自身范围内运行(而非全局…)是什么意思?那是不对的,除非我误解了你。@Cookie怪兽看我的编辑<代码>警报
在函数的私有作用域中运行…关于您的编辑
。应用
无法在那里使用,因为它将立即被调用,而不是传递到
设置超时
。您需要将其包装到另一个函数中。函数在全局范围内运行,但它在执行时会创建一个新的范围,就像每个函数一样。我可能错了,但我不认为
reloadfunction
是一个函数体,而是一个指向函数的变量。“reloadfunction是一个变量,它获取一些字符串值,这是一个函数名。”我假设它是一个字符串函数,类似于
“alert(1)”
我更新了我的注释以引用该问题。很确定这是一个参考资料。但是,您所说的“在其自身范围内运行(而非全局…)是什么意思?那是不对的,除非我误解了你。@Cookie怪兽看我的编辑<代码>警报
在函数的私有作用域中运行…关于您的编辑
。应用
无法在那里使用,因为它将立即被调用,而不是传递到
设置超时
。您需要将其包装到另一个函数中。函数在全局范围内运行,但执行时会创建一个新范围,就像每个函数一样。为什么不
func1:doSomething,func2:doSomethingElse
,然后执行?@RoyiNamir,因为我正在使用
doSomething()
作为实际代码的占位符,但如果需要,您可以直接引用另一个函数。哦,好的,错过了…………为什么不
func1:doSomething,func2:doSomethingElse
,然后执行?@RoyiNamir,因为我正在使用
doSomething()
作为实际代码的占位符,但如果需要,您可以直接引用另一个函数。哦,好的,我错过了。。。。。。。。。。。。