Я не совсем уверен, почему вы пытаетесь это сделать, и я не рекомендовал бы это на основании предоставленного примера. Я уверен, что есть лучший способ достичь желаемого результата, если бы вы могли предоставить больше контекста.
Тем не менее, если вы хотите исправить код, вам нужно сделать ret
и / или obj
доступно для вновь созданного Function
, которое включает объявление их в качестве параметров и последующую передачу параметров.
async function test(){
let obj={"Name":"BOB"}
let ret={};
//eval- works perfectly. stores the result in ret.eval
let evalstr='ret.eval=obj["Name"].toLowerCase()'
eval(evalstr)
//function- 1st attempt- ret not defined
let funcstr='ret.function=obj["Name"].toLowerCase()'
Function('ret', 'obj', '"use strict";return (' + funcstr + ')')(ret, obj);
//2nd attempt-obj not defined
funcstr='obj["Name"].toLowerCase()'
ret.obj=Function('obj', '"use strict";return (' + funcstr + ')')(obj);
console.log(ret)
}
test()