我有一个场景,我在字符串中接受巨大的函数脚本,需要实时执行它。一个简单的例子如下......
var fn = "function(){}";
eval(fn);
但是,我收到上述脚本的错误。有没有办法可以做到这一点,还是完全不鼓励?
答案 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()。而是为函数构造函数提供变量名和函数体。