정리/JavaScript
JavaScript. 함수 호출 앞의 void 정리
워로디스
2026. 5. 15. 22:07
기본 형태
void fn();
이는 특별한 함수 호출 문법이 아니라, void 단항 연산자를 함수 호출 결과에 적용한 것이다.
void fn();
는 다음과 같다.
void (fn());
의미
void fn();
의 동작은 다음과 같다.
fn()을 실행한다.fn()의 반환값은 버린다.- 전체 표현식의 결과는 항상
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를 의도적으로 기다리지 않음”이라는 의미로 자주 쓰인다.
- 에러 처리를 자동으로 해주지는 않는다.