return

return

return 문은 함수 실행을 종료하고 함수 호출자에게 반환할 값을 지정합니다. Baseline Widely available — 2015년 7월부터 여러 브라우저에서 지원되는 잘 정착된 기능입니다.

출처: return

본문

return 문은 함수 실행을 종료하고 함수 호출자(caller)에게 반환할 값을 지정합니다.

시도해 보기 (Try it)

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

구문 (Syntax)

return;
return expression;
  • expression: 반환할 값을 가진 표현식입니다. 생략하면 undefined가 반환됩니다.

설명 (Description)

return 문은 함수 본문 안에서만 사용할 수 있습니다. 함수 본문에서 return 문이 사용되면 함수의 실행이 중지됩니다. return 문은 다른 함수에 놓일 때 서로 다른 효과를 가집니다:

  • 일반 함수에서, 그 함수에 대한 호출은 반환값으로 평가됩니다.
  • async 함수에서, 생성된 promise는 반환된 값으로 resolve됩니다.
  • 제너레이터 함수에서, 생성된 제너레이터 객체의 next() 메서드는 { done: true, value: returnedValue }를 반환합니다.
  • async 제너레이터 함수에서, 생성된 async 제너레이터 객체의 next() 메서드는 { done: true, value: returnedValue }로 이행(fulfill)되는 promise를 반환합니다.

try 블록 안에서 return 문이 실행되면, 값이 실제로 반환되기 전에 그 finally 블록이 있다면 먼저 실행됩니다.

자동 세미콜론 삽입 (Automatic semicolon insertion)

이 문법은 return 키워드와 반환될 표현식 사이에 줄 종결자(line terminator)를 금지합니다.

return
a + b;

위 코드는 자동 세미콜론 삽입(ASI)에 의해 다음으로 변환됩니다:

return;
a + b;

이렇게 하면 함수가 undefined를 반환하고 a + b 표현식은 결코 평가되지 않습니다. 콘솔에서 경고가 발생할 수 있습니다.

이 문제를 피하려면(ASI를 막으려면) 괄호를 사용할 수 있습니다:

return (
  a + b
);

예제 (Examples)

함수 중단하기 (Interrupt a function)

함수는 return이 호출된 지점에서 즉시 멈춥니다.

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)

클로저(Closures)에 관한 문서도 참고하세요.

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

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

명세 (Specifications)

return 문은 ECMAScript 언어 명세에 정의되어 있습니다.

브라우저 호환성 (Browser compatibility)

이 기능은 대부분의 현대 브라우저에서 널리 지원됩니다(Baseline Widely available). 자세한 호환성 표는 MDN의 브라우저 호환성 섹션을 참고하세요.

더 알아보기

  • 함수 (Functions)
  • 클로저 (Closures)
  • 화살표 함수 (Arrow functions)