所以,这个人可能是一个简单的回答问题。在通过雄辩的javascript工作时,我遇到了一个使用新的Function构造函数的例子。我想尝试使用我自己的函数createWithEval对这个构造函数进行逆向工程,使用,你猜对了,eval()函数。我的函数采用名称,arg和body参数,它们都是字符串。eval在一个函数内
function createWithEval(name,arg,body){
var bdy= "function ";
var body2=name;
var body3="("
var body4=arg;
var body5=")"
bdy+=body2+=body3+=body4+=body5;
var body6="{";
var body7=body;
var body8="}";
bdy+=body6+=body7+=body8;
console.log(bdy)
return bdy;
}
eval(createWithEval("xtimesy","x,y","return x*y"));
console.log(xtimesy(2,3))
上面的代码创建作为预期xtimesy功能,但是当我尝试把在函数中eval语句,宣布
function createWithEval(name,arg,body){
var bdy= "function ";
var body2=name;
var body3="("
var body4=arg;
var body5=")"
bdy+=body2+=body3+=body4+=body5;
var body6="{";
var body7=body;
var body8="}";
bdy+=body6+=body7+=body8;
console.log(bdy)
return eval(bdy); //should declare and return the xtimesy function
}
createWithEval("xtimesy","x,y","return x*y");
console.log(xtimesy(2,3)) // ---> xtimesy is undefined
时,我想我可能有一个范围的功能弹出未定义错误或对eval函数工作方式的不正确理解。任何投入和/或解决方案都是受欢迎的。
如果'createWithEval'将*回报*功能,您需要写'VAR xtimesy = createWithEval(“xtimesy” ,“x,y”,“return x * y”);'使其可调用 – Bergi
可能重复[Eval字符串到可调用的JS函数](https://stackoverflow.com/a/17792406/1048572)? – Bergi