我基本上想要转换包含这样的代码的字符串 -
var code = "function Solve(args) { // do stuff and return value};";
进入可以传递参数的可执行函数。
当我与eval(code + "Solve(args);");
一起使用时,它没有给我任何错误,但结果并不像预期的那样。我也尝试过:
var fu = eval(code);
var result = fu(args);
fu保持未定义。 我做错了什么或有更好的方法来做到这一点。
答案 0 :(得分:3)
使用eval通常是一种非常糟糕的做事方式。
eval将把代码放入全局命名空间
var code = "function Solve(args) { return args * 2}";
eval(code);
var val = 1;
var result = Solve(val);
如果你不知道这个名字,你就必须做这样的事情
var code = "function Solve2(args) { return args * 2}";
var val = 3;
var result = eval("(" + code + ")(" + val + ");");
上述方法的问题是它将使用toString()
从字符串创建函数的更好方法var sumCode = "return a + b";
var sum = new Function("a","b", sumCode);
sum(1,2);
答案 1 :(得分:2)
这适用于jsfiddle:
var code = "function Solve(args) { alert(args)};";
eval(code + "Solve('test');");
您期望的功能和结果是什么?
答案 2 :(得分:0)
试试:
eval(code + "fu = Solve(args);");
console.log(fu);
答案 3 :(得分:0)
使用eval提出的所有其他答案,所以这是一种略有不同的方法。
试试这个并告诉我你喜欢它:
var code = "alert('I am an alert')";
var codeToFunction = new Function(code);
codeToFunction();