return

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since July 2015.

return 语句用于终止函数执行,并指定要返回给调用函数的值。

尝试一下

语法

js
return;
return expression;
expression 可选

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

描述

return 语句只能在函数体内使用。当 return 出现在函数体内部时,该函数的执行将会停止。return 语句在不同类型的函数中具有不同的效果:

  • 在普通函数中,对该函数的调用会返回其返回值。
  • 在异步函数中,生成的 promise 将以返回的值敲定。
  • 在生成器函数中,生成的生成器对象的 next() 方法将返回 { done: true, value: 返回的值 }
  • 在异步生成器函数中,生成的异步生成器对象的 next() 方法返回一个已兑现的 promise,其值为 { done: true, value: 返回的值 }

如果在 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() {
  // 无限循环
  for (let count = 1; ; count++) {
    console.log(`${count}A`); // 直到 5 为止
    if (count === 5) {
      return;
    }
    console.log(`${count}B`); // 直到 4 为止
  }
  console.log(`${count}C`); // 从不出现
}

counter();

// 输出:
// 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

规范

Specification
ECMAScript Language Specification
# sec-return-statement

浏览器兼容性

BCD tables only load in the browser

参见