Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/478.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 用函数内部字符串化函数_Javascript - Fatal编程技术网

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-是的,我明白。我认为肯定有,但如果没有,解析器方法基本上就是他们所坚持的方法。:-)