箭头函数可省略大括号和return的前提是函数体为单个表达式;若含语句、变量或逻辑分支,则必须用大括号并显式return;返回对象字面量需用小括号包裹。

箭头函数省略大括号和 return 的前提很明确:函数体必须是**单个表达式**,且这个表达式就是你要返回的值。
什么时候能同时省略大括号和 return
当箭头函数只做一件事——计算并返回一个结果,中间没有变量声明、没有 if 判断、没有 console.log 等语句,就可以省略花括号和 return,系统会自动隐式返回该表达式的值。
-
✅ 正确示例:
[1, 2, 3].map(x => x * 2)→ 返回[2, 4, 6] -
✅ 正确示例:
users.filter(u => u.active)→ 返回所有 active 为 true 的用户 -
❌ 错误写法:
x => { return x * 2 }—— 用了大括号却没写 return(语法错误) -
❌ 错误写法:
x => return x * 2—— 省略大括号时不能写 return(语法错误)
用了大括号就必须写 return
一旦加了花括号,就表示进入了“代码块”模式,哪怕里面只有一行表达式,也必须显式写 return,否则函数默认返回 undefined。
-
✅ 正确写法:
arr.map(x => { return x.toString(); }) -
❌ 常见疏漏:
arr.map(x => { x.toString(); })→ 返回的是[undefined, undefined, ...]
返回对象字面量要小心括号
如果想直接返回一个对象(比如 { id: 1, name: 'Alice' }),不能直接写 x => { id: x.id, name: x.name },因为花括号会被当成代码块,而不是对象。必须用小括号包裹:
-
✅ 正确写法:
users.map(u => ({ id: u.id, name: u.name })) -
❌ 错误写法:
users.map(u => { id: u.id, name: u.name })(语法错误或返回 undefined)
参数括号是否可省略,不影响 return 和大括号规则
单参数时括号可省(x => x * 2),无参或多参时括号不可省(() => 42 或 (a, b) => a + b),但这和是否能省 return / 大括号无关。核心只看函数体是不是单表达式。
- 单表达式 → 可省大括号 + 隐式 return
- 含语句、变量、逻辑分支 → 必须加大括号 + 显式 return











