Javascript 可以获取文本形式的函数吗?

发布于 2024-09-12 11:15:13 字数 179 浏览 4 评论 0原文

Javascript 可以获取文本形式的函数吗? 我的想法就像 eval() 的逆。

function derp() { a(); b(); c(); }

alert(derp.asString());

结果类似于“a(); b(); c();”

它存在吗?

Can Javascript get a function as text?
I'm thinking like the inverse of eval().

function derp() { a(); b(); c(); }

alert(derp.asString());

The result would be something like "a(); b(); c();"

Does it exist?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

意中人 2024-09-19 11:15:13

更新为在下面的评论中添加警告 CMSTim DownMooGoo

最接近的东西可以调用 .toString()< /code>在函数上获取完整的函数文本,如下所示:

function derp() { a(); b(); c(); }
alert(derp.toString()); //"function derp() { a(); b(); c(); }"

您可以尝试一下这里,但需要注意一些警告:

  • 函数上的.toString()依赖于实现此处规范 15.3 节.4.2)
    • 根据规范:返回函数的依赖于实现的表示。该表示形式具有FunctionDeclaration 的语法。请特别注意,表示字符串中空格、行终止符和分号的使用和放置取决于实现。
    • 注意到 Opera Mobile、早期 Safari 中的差异,两者都没有像上面的示例那样显示源代码。
  • Firefox 返回一个经过优化后的编译函数,例如:
    • (function() { x=5; 1+2+3; }).toString() == function() { x=5; }).toString() == function() { x=5; 1+2+3; }).toString() }

Updated to include caveats in the comments below from CMS, Tim Down, MooGoo:

The closest thing available to what you're after is calling .toString() on a function to get the full function text, like this:

function derp() { a(); b(); c(); }
alert(derp.toString()); //"function derp() { a(); b(); c(); }"

You can give it a try here, some caveats to be aware of though:

  • The .toString() on function is implementation-dependent (Spec here section 15.3.4.2)
    • From the spec: An implementation-dependent representation of the function is returned. This representation has the syntax of a FunctionDeclaration. Note in particular that the use and placement of white space, line terminators, and semicolons within the representation string is implementation-dependent.
    • Noted differences in Opera Mobile, early Safari, neither displaying source like my example above.
  • Firefox returns a compiled function, after optimization, for example:
    • (function() { x=5; 1+2+3; }).toString() == function() { x=5; }
空心↖ 2024-09-19 11:15:13
function derp() { a(); b(); c(); }

alert(derp.toString());
function derp() { a(); b(); c(); }

alert(derp.toString());
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文