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

函数返回异常是否因大括号?箭头函数大括号为何返回undefined?

关于箭头函数大括号与返回值的问题解答

嘿,我来帮你把这两个疑惑掰扯清楚~

疑问1:函数是否仅因为大括号的存在就返回错误结果?

并不是“大括号本身导致错误结果”,而是箭头函数的两种语法规则在起作用:

  • 当箭头函数使用简洁体(没有大括号)时,会自动返回箭头右侧表达式的结果,比如你写的m=>m>n,相当于m=>{ return m>n; }。
  • 当箭头函数使用块体(有大括号)时,必须显式通过return语句指定返回值,否则函数会默认返回undefined。

看你的示例代码:

function greater(n){ return (m)=>{m>n}; }

这里箭头函数用了大括号形成块体,里面只执行了m>n这个比较表达式,但没有把结果return出去,所以调用greater(10)(11)时,箭头函数没有返回值,最终得到undefined。

而第二个函数:

function great(n){ return m=>m>n; }

箭头函数用了简洁体,自动返回m>n的比较结果,所以great(10)(11)会返回true。

疑问2:为何箭头函数外层的大括号会在条件成立时返回undefined?

原因和上面说的一致——块体语法下的箭头函数需要显式return。

你可以把箭头函数的块体理解成普通函数的函数体:比如普通函数里如果只写了一个表达式但不return,那函数执行完就返回undefined。箭头函数的块体也是一样的逻辑:

// 普通函数类比
function compare(m, n) {
  m > n; // 只是执行表达式,没有return
}
compare(11, 10); // 返回undefined

你的箭头函数(m)=>{m>n}就和这个普通函数的逻辑一样,虽然11>10的结果是true,但这个结果没有被return出去,所以函数最终返回undefined。如果改成(m)=>{ return m>n; },就能得到预期的true了。

测试验证:
greater(10)(11) → undefined
great(10)(11) → true

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 05:16:58