如何在 JavaScript 中获取函数体文本

How to get function body text in JavaScript?

本文关键字:获取 函数体 文本 JavaScript      更新时间:2023-09-26
function derp() { a(); b(); c(); }

derp.toString() 将返回 "function derp() { a(); b(); c(); }" ,但我只需要函数的主体,所以"a(); b(); c();",因为我可以计算表达式。是否可以以跨浏览器的方式执行此操作?

var entire = derp.toString(); 
var body = entire.slice(entire.indexOf("{") + 1, entire.lastIndexOf("}"));
console.log(body); // "a(); b(); c();"

请使用搜索,这是这个问题的重复

由于您希望在前{和最后}之间显示文本:

derp.toString().replace(/^[^{]*{'s*/,'').replace(/'s*}[^}]*$/,'');

请注意,我将替换分解为正则表达式,而不是一个涵盖整个事情的正则表达式(.replace(/^[^{]*{'s*(['d'D]*)'s*}[^}]*$/,'$1')(,因为它的内存密集度要低得多。

注意:接受的答案取决于解释器不会做疯狂的事情,例如在"函数"和"{"之间抛出注释。IE8 很乐意这样做:

>>var x = function /* this is a counter-example { */ () {return "of the genre"};
>>x.toString();
"function /* this is a counter-example { */ () {return "of the genre"}"

一个单行的简短正则表达式示例:

var body = f.toString().match(/^[^{]+'{(.*?)'}$/)[1];

如果你想最终eval脚本,并假设函数不带参数,这应该快一点:

var body = '(' + f.toString() + ')()';

你需要这样的东西:

var content = derp.toString();
var body = content.match(/{['w'W]*}/);
body = body.slice(1, body.length - 1);
console.log(body); // a(); b(); c();