箭头函数多行代码必须用大括号包裹并显式return,否则返回undefined;单行表达式可隐式返回,对象字面量需加小括号避免被解析为代码块。

箭头函数处理多行代码时,必须用大括号 {} 包裹函数体,且显式使用 return 语句才能返回值。如果不写 return,即使有大括号,函数也会默认返回 undefined。
多行箭头函数必须显式 return
当箭头函数体有多行(比如包含变量声明、条件判断、循环等),语法上需要用 {} 括起来,此时它就变成了「块级函数体」,不再自动返回表达式结果。
// ❌ 错误:有大括号但没 return,返回 undefined
const sum = (a, b) => {
const result = a + b;
result; // 这行不会被返回
};
console.log(sum(2, 3)); // undefined
// ✅ 正确:显式 return
const sum = (a, b) => {
const result = a + b;
return result;
};
console.log(sum(2, 3)); // 5
单行隐式返回 vs 多行显式返回
-
单表达式、无大括号 → 自动返回该表达式结果
const double = x => x * 2; // ✅ 返回 x * 2
-
多语句、有大括号 → 必须
return,否则不返回任何值const double = x => { console.log('doubling...'); return x * 2; // ✅ 必须写 return };
常见易错场景
在
map、filter等方法中误写多行却忘记return,导致数组变成[undefined, undefined, ...]-
把对象字面量直接写在单行箭头函数里,忘了加小括号,被解析成代码块:
// ❌ 被当成代码块,没有返回值 const createObj = () => { name: 'Alice', age: 30 }; // ✅ 正确:用小括号包裹对象,触发隐式返回 const createObj = () => ({ name: 'Alice', age: 30 }); // ✅ 或者多行 + return const createObj = () => { return { name: 'Alice', age: 30 }; };
不复杂但容易忽略










