所以,這個人可能是一個簡單的回答問題。在通過雄辯的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