このページはコミュニティーの尽力で英語から翻訳されました。MDN Web Docs コミュニティーについてもっと知り、仲間になるにはこちらから。

View in English Always switch to English

return

Baseline 広く利用可能

この機能は広く実装されており、多くのバージョンの端末やブラウザーで動作します。2015年7月以降、すべてのブラウザーで利用可能です。

return 文は関数の実行を終了し、関数の呼び出し元に返す値を指定します。

試してみましょう

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

console.log(getRectArea(3, 4));
// 予想される結果: 12

console.log(getRectArea(-3, 4));
// 予想される結果: 0

構文

js
return;
return expression;
expression 省略可

値が返される式。省略した場合は、代わりに undefined が返されます。

解説

return 文は関数本体内でのみ使用できます。関数本体内で return 文が使用されると、関数の実行は停止します。return 文は配置される関数によって効果が異なります。

  • 単純関数では、その関数への呼び出しは返値として評価されます。
  • 非同期関数では、生成されたプロミスは返された値で解決されます。
  • ジェネレーター関数では、生成されたジェネレーターオブジェクトの next() メソッドは { done: true, value: returnedValue } を返します。
  • 非同期ジェネレーター関数では、生成された非同期ジェネレーターオブジェクトの next() メソッドは、 { done: true, value: returnedValue } で履行されるプロミスを返します。

return 文が try ブロック内で実行された場合、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

仕様書

仕様書
ECMAScript® 2027 Language Specification
# sec-return-statement

ブラウザーの互換性

関連情報