JavaScript-从字符串中的函数定义创建函数对象

JavaScript-从字符串中的函数定义创建函数对象,javascript,string,function,Javascript,String,Function,在JavaScript中,有没有办法从字符串中的函数定义创建函数对象 类似于用于从字符串创建JSON的JSON.parse const parseFunction = (str)=> { // What should be implemented here? return func; } let funStr = parseFunction("function replacer(arg1) {console.log(arg1)}"); 使用eval会给应用

在JavaScript中,有没有办法从字符串中的函数定义创建函数对象

类似于用于从字符串创建JSON的JSON.parse

const parseFunction = (str)=> {
   // What should be implemented here?
   return func;
}
let funStr = parseFunction("function replacer(arg1) {console.log(arg1)}");

使用
eval
会给应用程序带来很多安全风险。Javascript现在有了一个替代方案


你试着玩弄它,这只是参考。

只是即兴创作。@abhishek sharma先生回答

使用
函数(“'use strict”;return(“+str+”)”)()创建的函数将不会关闭当前作用域。如果有人想访问当前范围内的某个变量

const parseFunction = (str) => {
  return Function(
    'varNameInStr',
    'return function() {return (' + str + ')}',
  )(varInCurrScope)();
};
parseFunction("function(){console.log(varNameInStr)}")

你是说
eval
?你为什么需要这个?函数定义从何而来?可以使用函数构造函数吗<代码>新功能(str)
?只需传递函数体instead@felix-kling正在处理基于JSON模板的仪表板配置。。找不到更好的验证器(lints),它接受函数作为键的值。。在JSON中包含函数也会使其成为无效JSON。。我希望将函数作为值保存,同时也是一个有效的JSON。因此,寻找选项只是为了确保人们不会产生错误的印象:direct
eval
Function()()
之间的唯一区别在于后者在全局范围内执行代码。没有任何其他东西能从根本上让它更安全。
const parseFunction = (str) => {
  return Function(
    'varNameInStr',
    'return function() {return (' + str + ')}',
  )(varInCurrScope)();
};
parseFunction("function(){console.log(varNameInStr)}")