You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

匿名函数是表达式吗?为何在JS期望表达式处未按预期工作?

匿名函数是函数表达式吗?为什么示例中未按预期工作?

核心结论

  • 匿名函数确实属于函数表达式的范畴,但你遇到的问题和它是不是表达式无关,而是因为你没有调用这个函数,只是把函数对象本身传给了String()。

你的代码分析

你写的代码:

const result = String(function () {
    return 2;
});

这里的function () { return 2; }是一个匿名函数表达式,它本身是一个函数对象,而非这个函数的返回值。当你把它传给String()时,JS会默认调用函数对象的toString()方法,将函数的源码转换成字符串,所以你得到了函数体的字符串形式。

如何得到预期结果

要获取函数返回的2并转成字符串,你需要调用这个匿名函数,把它的返回值传给String()。有两种常见写法:

  1. 直接在函数表达式后加调用括号:
const result = String(function () {
    return 2;
}());
  1. 用括号包裹函数表达式(更符合立即执行函数表达式的规范写法):
const result = String((function () {
    return 2;
})());

这两种写法都会先执行匿名函数得到返回值2,再把2传给String(),最终得到'2'。

补充说明

函数表达式的本质是一个表达式,它的求值结果是函数对象。如果想得到函数的返回值,必须主动调用它——不管是匿名函数还是具名函数表达式,都是这个逻辑。你之前的误解在于把“函数表达式本身”和“函数执行后的返回值”混淆了。

内容的提问来源于stack exchange,提问作者radman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 05:02:03