return

Baseline 已广泛支持

此特性已相当成熟,可在许多设备和浏览器版本上使用。自 ⁨2015 年 7 月⁩以来,各浏览器均已提供此特性。

return 语句结束函数的执行,并指定一个值返回给函数调用者。

试一试

function getRectArea(width, height) {
  if (width > 0 && height > 0) {
    return width * height;
  }
  return 0;
}

console.log(getRectArea(3, 4));
// Expected output: 12

console.log(getRectArea(-3, 4));
// Expected output: 0

语法

js
return;
return expression;
expression 可选

要返回的值的表达式。如果省略,则返回 undefined

描述

return 语句只能在函数体内部使用。当 return 语句在函数体中使用时,函数的执行将被停止。return 语句在不同的函数中具有不同的效果。

  • 在普通函数中,该函数的调用将计算为返回值。
  • 在异步函数中,生成的 Promise 将使用返回值进行解析。
  • 在生成器函数中,生成的生成器对象的 next() 方法返回 { done: true, value: returnedValue }
  • 在异步生成器函数中,生成的异步生成器对象的 next() 方法返回一个 Promise,该 Promise 使用 { done: true, value: returnedValue } 完成。

如果在 try 块中执行 return 语句,则在实际返回该值之前,如果存在 finally 块,它将首先执行。

自动分号插入

语法禁止在 return 关键字和要返回的表达式之间使用行终止符。

js
return
a + b;

上面的代码被自动分号插入 (ASI) 转换为

js
return;
a + b;

这会使函数返回 undefined,并且 a + b 表达式永远不会被评估。这可能会在控制台中生成警告

为了避免这个问题(防止 ASI),你可以使用括号

js
return (
  a + b
);

示例

中断函数

函数在调用 return 的位置立即停止。

js
function counter() {
  // Infinite loop
  for (let count = 1; ; count++) {
    console.log(`${count}A`); // Until 5
    if (count === 5) {
      return;
    }
    console.log(`${count}B`); // Until 4
  }
  console.log(`${count}C`); // Never appears
}

counter();

// Logs:
// 1A
// 1B
// 2A
// 2B
// 3A
// 3B
// 4A
// 4B
// 5A

返回函数

另请参阅有关闭包的文章。

js
function magic() {
  return function calc(x) {
    return x * 42;
  };
}

const answer = magic();
answer(1337); // 56154

规范

规范
ECMAScript® 2026 语言规范
# sec-return-statement

浏览器兼容性

另见