정리/JavaScript

JavaScript. 함수 호출 앞의 void 정리

워로디스 2026. 5. 15. 22:07

기본 형태

void fn();

이는 특별한 함수 호출 문법이 아니라, void 단항 연산자를 함수 호출 결과에 적용한 것이다.

void fn();

는 다음과 같다.

void (fn());

의미

void fn();

의 동작은 다음과 같다.

  1. fn()을 실행한다.
  2. fn()의 반환값은 버린다.
  3. 전체 표현식의 결과는 항상 undefined가 된다.
function fn() {
  return 123;
}

const result = void fn();

console.log(result); // undefined

단독 문장으로 쓰인 경우

void fn();

처럼 단독 문장으로 쓰이면 보통 다음 의미다.

fn(); // 반환값을 의도적으로 사용하지 않음

즉, 함수는 실행하되 반환값은 쓰지 않겠다는 의도 표시로 볼 수 있다.

async 함수에 쓰인 경우

void asyncFn();

asyncFn()은 Promise를 반환하지만, void를 붙이면 반환 Promise를 사용하지 않겠다는 뜻이 된다.

void asyncFn();

의 일반적인 의미:

async 함수를 실행하지만, 여기서는 await하지 않고 결과도 사용하지 않겠다.

이런 패턴은 흔히 fire-and-forget 호출에 사용된다.

ESLint / TypeScript에서의 용도

@typescript-eslint/no-floating-promises 같은 규칙이 켜져 있으면, 처리되지 않은 Promise에 경고가 날 수 있다.

asyncFn(); // 경고 가능

이때 다음처럼 쓰면 의도적으로 Promise를 무시한다는 신호가 된다.

void asyncFn();

주의: 에러 처리는 하지 않는다

void는 반환값을 undefined로 만들 뿐, 에러를 잡아주지는 않는다.

void asyncFn();

에서 Promise가 reject되면, 별도 처리가 없을 경우 unhandled rejection이 발생할 수 있다.

필요하면 .catch()를 붙인다.

void asyncFn().catch((error) => {
  console.error(error);
});

또는 함수 내부에서 처리한다.

async function asyncFn() {
  try {
    await work();
  } catch (error) {
    console.error(error);
  }
}

void asyncFn();

void fn()void fn의 차이

void fn();

fn()을 호출한다.

void fn;

fn 값을 평가만 하고 호출하지 않는다.

즉, 괄호 ()가 있어야 함수가 실행된다.

실무에서 이렇게 읽으면 된다

void fn();

이 함수는 실행하지만, 반환값은 의도적으로 사용하지 않는다.

void asyncFn();

이 async 함수는 실행하지만, 반환 Promise는 기다리지 않고 사용하지 않는다.

요약

void fn();

는:

  • fn()을 실행한다.
  • 반환값을 버린다.
  • 전체 결과를 undefined로 만든다.
  • 단독 문장에서는 “반환값을 의도적으로 무시함”이라는 신호로 볼 수 있다.
  • async 함수에서는 “Promise를 의도적으로 기다리지 않음”이라는 의미로 자주 쓰인다.
  • 에러 처리를 자동으로 해주지는 않는다.