return

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

¥The return statement ends function execution and specifies a value to be returned to the function caller.

Try it

语法

¥Syntax

js
return;
return expression;
expression Optional

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

描述

¥Description

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

¥The return statement can only be used within function bodies. When a return statement is used in a function body, the execution of the function is stopped. The return statement has different effects when placed in different functions:

  • 在普通函数中,对该函数的调用计算结果为返回值。
  • 在异步函数中,生成的 Promise 通过返回值来解析。
  • 在生成器函数中,生成的生成器对象的 next() 方法返回 { done: true, value: returnedValue }
  • 在异步生成器函数中,生成的异步生成器对象的 next() 方法返回用 { done: true, value: returnedValue } 履行的承诺。

如果在 try 块内执行 return 语句,则在实际返回值之前,首先执行其 finally 块(如果存在)。

¥If a return statement is executed within a try block, its finally block, if present, is first executed, before the value is actually returned.

自动插入分号

¥Automatic semicolon insertion

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

¥The syntax forbids line terminators between the return keyword and the expression to be returned.

js
return
a + b;

上面的代码经过 自动分号插入 (ASI) 转化为:

¥The code above is transformed by automatic semicolon insertion (ASI) into:

js
return;
a + b;

这使得函数返回 undefined 并且 a + b 表达式永远不会被计算。这可能会生成 控制台中出现警告

¥This makes the function return undefined and the a + b expression is never evaluated. This may generate a warning in the console.

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

¥To avoid this problem (to prevent ASI), you could use parentheses:

js
return (
  a + b
);

示例

¥Examples

中断函数

¥Interrupt a function

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

¥A function immediately stops at the point where return is called.

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

返回一个函数

¥Returning a function

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

¥See also the article about Closures.

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

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

规范

Specification
ECMAScript Language Specification
# sec-return-statement

¥Specifications

浏览器兼容性

BCD tables only load in the browser

¥Browser compatibility

也可以看看

¥See also