Also Leute, dieser ist wahrscheinlich eine einfach beantwortete Frage. Bei der Arbeit mit eloquentem Javascript stieß ich auf ein Beispiel, in dem er den neuen Konstruktor Function verwendet. Ich wollte versuchen, diesen Konstruktor mit meiner eigenen Funktion createWithEval zurückzuentwickeln, indem Sie die Funktion eval() verwenden. Meine Funktion hat einen Namen, einen arg und einen body Parameter, die alle Strings sind.Eval innerhalb einer Funktion
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))
Der obige Code erstellt die xtimesy wie beabsichtigt funktionieren, aber wenn ich versuche, die eval-Anweisung innerhalb der Funktion zu setzen, die Funktion erscheint nicht definiert, wenn erklärt
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
Ich glaube, ich einen Umfang haben Fehler oder falsches Verständnis der Funktionsweise der Eval-Funktion. Irgendwelche Eingaben und/oder Lösungen sind willkommen.
Wenn 'createWithEval' würde * Rückkehr * die Funktion, dann werden Sie schreiben müssen' var xtimesy = createWithEval („xtimesy“ , "x, y", "return x * y"); 'um es aufrufbar zu machen – Bergi
möglich duplizieren von [Eval eine Zeichenfolge zu einer aufrufbaren JS-Funktion] (https://stackoverflow.com/a/17792406/1048572)? – Bergi