String containing code to executable function

2019-07-21 20:43发布

问题:

I basically want to convert a string containing code like this -

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

into an executable function which you can pass arguments. When I use it with eval(code + "Solve(args);"); It gives me no errors but the results are not as expected. I also tried:

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

fu stays undefined. Am I doing something wrong or is there a better way to do this.

回答1:

Using eval is normally a very bad way of doing things.

eval is going to put the code into the Global namespace

var code = "function Solve(args) { return args * 2}";  
eval(code); 
var val = 1;
var result = Solve(val);

if you do not know the name, you would have to do something like this

var code = "function Solve2(args) { return args * 2}";
var val = 3;  
var result = eval("(" + code + ")(" + val + ");"); 

problem with the above method is it will use toString()

A better way to make a function from a string is using new Function

var sumCode = "return a + b";
var sum = new Function("a","b", sumCode);
sum(1,2); 


回答2:

this works on jsfiddle:

var code = "function Solve(args) { alert(args)};"; 
eval(code + "Solve('test');");

what is the function and result you expect?



回答3:

Just try with:

eval(code + "fu = Solve(args);");

console.log(fu);


回答4:

All the other answers proposed using eval, so here is a mildly different approach.

Try this and tell me how you like it:

var code = "alert('I am an alert')";
var codeToFunction = new Function(code);
codeToFunction();