JavaScript-从字符串中的函数定义创建函数对象
在JavaScript中,有没有办法从字符串中的函数定义创建函数对象 类似于用于从字符串创建JSON的JSON.parseJavaScript-从字符串中的函数定义创建函数对象,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会给应用
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。因此,寻找选项只是为了确保人们不会产生错误的印象:directeval
和Function()()
之间的唯一区别在于后者在全局范围内执行代码。没有任何其他东西能从根本上让它更安全。
const parseFunction = (str) => {
return Function(
'varNameInStr',
'return function() {return (' + str + ')}',
)(varInCurrScope)();
};
parseFunction("function(){console.log(varNameInStr)}")