Javascript 用函数内部字符串化函数
有没有办法把里面有函数的函数字符串化?我想字符串化Javascript 用函数内部字符串化函数,javascript,Javascript,有没有办法把里面有函数的函数字符串化?我想字符串化条函数 const foo = (x) => { return x + x; }; const bar = (y) => { return foo(y) }; bar.toString()返回 function bar(y) { return foo(y); } 但我想要的是: const bar = (y) => { const foo = (x) => { return x + x;
条
函数
const foo = (x) => {
return x + x;
};
const bar = (y) => {
return foo(y)
};
bar.toString()
返回
function bar(y) {
return foo(y);
}
但我想要的是:
const bar = (y) => {
const foo = (x) => {
return x + x;
};
return foo(y);
};
有可能吗?我想使用bar
如下:
// I don't have control below this line
import bar from 'bar';
`<script>(${bar})(5)</script>`
//我在这行下面没有控制权
从“bar”导入bar;
`(${bar})(5)`
有可能吗
可能吧。它根本不是简单的。要做到这一点,您必须使用诸如Esprima或Babel、ESLint等中的JavaScript解析器来解析同时包含bar
和foo
的源代码,并使用生成的AST来识别bar
调用的函数,将这些函数转换为源代码,将bar
转换为源代码,并将它调用的函数插入它的开头。即使如此,根据这些函数调用的内容以及它们使用的关闭对象,您可能还有更多的工作要做
人们很容易想到“好吧,我可以在函数上使用toString
,然后使用一点正则表达式来计算bar
调用了什么函数。”但是JavaScript源代码语法太复杂,无法用一两个正则表达式正确识别函数代码中的函数调用。您需要一个合适的解析器
正如有人在评论(现已删除)中所说,这听起来像-就像你试图通过对
条进行这种奇怪的转换来解决一些其他问题。我会专注于用另一种方式解决这个问题。要实现这一点,你必须按照bar(5)。toString()
@codenubie-不,那不行。@t.J.Crowder,为什么?条(5)->给出5,然后toString
?我试过了it@Codenewbie-“5”
不是OP说他们想要的。@t.J.Crowder我的错!!好的,OP需要将函数字符串化吗?对不起,我删除了xy问题注释,因为这行下面我没有控制权
表明可能没有替代选项approach@ChrisG-是的,我明白。我认为肯定有,但如果没有,解析器方法基本上就是他们所坚持的方法。:-)