javascript - 内部带有函数的字符串化函数
问题描述
有没有办法对内部有函数的函数进行字符串化?我想对函数进行字符串化bar
。
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>`
解决方案
甚至可能吗?
大概。这一点都不简单。为此,您必须使用像 Esprima 或 Babel、ESLint 等中的 JavaScript 解析器来解析包含两者的源代码,bar
并foo
使用生成的 AST 来识别bar
调用的函数,将这些函数转换为源代码,转换bar
为源代码,并将它调用的函数插入到它的开头。即便如此,根据这些函数调用什么以及它们使用什么东西来关闭它们,您可能还有更多工作要做。
很容易想到“好吧,我可以toString
在函数上使用,然后使用一些正则表达式来找出函数bar
调用的内容。” 但是 JavaScript 源代码语法过于复杂,无法用一两个正则表达式正确识别函数代码中的函数调用。你需要一个合适的解析器。
正如有人在评论中所说(现已删除),这听起来像是一个 X/Y 问题 ——就像你试图通过对bar
. 我会专注于以不同的方式解决这个问题。
推荐阅读
- amazon-web-services - 用于 websockets 的 AWS API Gateway:建立连接后发布事件
- bpf - ebpf:bpf_prog_load() 与 bpf_object__load()
- c++ - 继承类问题未定义引用
- mysql - 为什么 WHERE 返回 0 行?
- deep-learning - 深度学习模型测试精度不稳定
- elasticsearch - 在 Grafana 中计算加权平均值
- javascript - 如何在反应中添加输入验证?
- ruby-on-rails - 从常量调用方法时Rails NoMethodError
- excel - 循环遍历有空格的列 - excel
- github-actions - 如何在 Github Actions 和 Monorepo 中使用子文件夹?