包含可执行函数代码的字符串

时间:2014-02-12 13:32:05

标签: javascript string function eval

我基本上想要转换包含这样的代码的字符串 -

var code = "function Solve(args) { // do stuff and return value};";

进入可以传递参数的可执行函数。    当我与eval(code + "Solve(args);");一起使用时,它没有给我任何错误,但结果并不像预期的那样。我也尝试过:

var fu = eval(code);
var result = fu(args);

fu保持未定义。    我做错了什么或有更好的方法来做到这一点。

4 个答案:

答案 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()

使用new Function

从字符串创建函数的更好方法
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();