Javascript 是否可以使用eval执行函数?

Javascript 是否可以使用eval执行函数?,javascript,eval,Javascript,Eval,我有一个场景,我接受字符串中的巨大函数脚本,并需要实时执行它。下面是一个简单的例子 var fn = "function(){}"; eval(fn); 但是,上面的脚本有一个错误。有没有一种方法可以让我做到这一点,还是完全不鼓励 var fn = "function(){}"; eval("(" + fn + "())"); 或者,如果要定义函数以便以后可以调用它: var fn = "function(){}"; eval("fn = " + fn); fn(); 如果您只是从字符串中

我有一个场景,我接受字符串中的巨大函数脚本,并需要实时执行它。下面是一个简单的例子

var fn = "function(){}";
eval(fn);
但是,上面的脚本有一个错误。有没有一种方法可以让我做到这一点,还是完全不鼓励

var fn = "function(){}";
eval("(" + fn + "())");
或者,如果要定义函数以便以后可以调用它:

var fn = "function(){}";
eval("fn = " + fn);
fn();

如果您只是从字符串中寻找一个函数构造函数,那么您可以不用eval来完成这项工作

//使用eval
eval(“var evalfn=function(){console.log('in evalfn');return 11}”);
var ret1=evalfn();
控制台日志(“eval ret1:+ret1”);
//使用不带参数的新函数()
var fn=新函数(“console.log('in fn');返回12”);
var ret2=fn();
console.log(“fn-ret2:+ret2”);
//使用带参数的新函数()
var fnwithargs=新函数(“a”、“b”、“console.log('in fnwithargs');返回a+b”);
var ret3=fnwithargs(10,5);

console.log(“fnwithargs ret3:+ret3”)
可以通过添加括号来实现这一点,但几乎不需要
eval
。您使用它的确切目的是什么?
var fn=“(function(){return 42;})(;”;警报(评估(fn))你好,瑞安。我正在从事一个项目,其中一些简单的代码片段将在mongo数据库中定义,这些代码片段将在服务API请求时在nodejs上执行。因此,功能将根据不同的模型动态变化。您不需要在主体周围卷曲,
新功能(“console.log('in Function');return 12”)
也会做同样的事情。还应特别注意的是,
eval
的所有免责声明和注意事项也适用于
新功能
。没错,Amadan。@Amadan:不是所有的免责声明和注意事项。Direct
eval
在当前范围内运行,如果动态代码几乎不需要,那么它几乎不需要额外的代码。@Ryan:你说得对,不是所有的。谢谢你的回答。但我的需求要求如下var fn=“function(){}”;评估(“(“+fn+”());”;谢谢你的回复。你的第一个模型适合我。