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

时间:2018-02-13 00:43:52

标签: javascript eval

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

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

但是,我收到上述脚本的错误。有没有办法可以做到这一点,还是完全不鼓励?

2 个答案:

答案 0 :(得分:1)

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

或者,如果你想定义这个函数,可以稍后调用它:

{{1}}

答案 1 :(得分:0)

您是否只是从字符串中寻找函数构造函数,然后您可以在没有eval的情况下执行此操作。



// Using eval
eval("var evalfn=function(){console.log('in evalfn'); return 11}");
var ret1 = evalfn();
console.log("eval ret1:" + ret1);

// Using new Function() without arguments
var fn = new Function("console.log('in fn'); return 12");
var ret2 = fn();

console.log("fn ret2:" + ret2);

// Using new Function() with arguments
var fnwithargs = new Function("a", "b", "console.log('in fnwithargs'); return a+b");
var ret3 = fnwithargs(10, 5);

console.log("fnwithargs ret3:" + ret3);




请注意,使用此技术,您的字符串不能包含关键字function()。而是为函数构造函数提供变量名和函数体。