← Назад к вопросам

В чем разница между return undefined и отсутствием return?

1.6 Junior🔥 141 комментариев
#Node.js и JavaScript

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI28 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Разница между return undefined и отсутствием return

Практический результат

В JavaScript/TypeScript результат полностью идентичен:

function func1() {
  return undefined;
}

function func2() {
  // без return
}

console.log(func1()); // undefined
console.log(func2()); // undefined

console.log(func1() === func2()); // true

Оба варианта возвращают undefined. Эта разница существует только на уровне семантики и стиля кода.

TypeScript типизация

С точки зрения TypeScript, типы тоже одинаковые:

function returnsUndefined(): undefined {
  return undefined; // OK
}

function implicitUndefined(): undefined {
  // OK, неявно возвращает undefined
}

Оба варианта удовлетворяют типу undefined.

Когда это имеет значение

1. Функции, не возвращающие значение (void):

function logMessage(msg: string): void {
  console.log(msg);
  // return undefined; — не нужно писать явно
  // return; — можно написать для ранного выхода
}

function earlyExit(x: number): void {
  if (x < 0) {
    console.log("Negative");
    return; // явный выход из функции
  }
  console.log("Processing...");
}

2. Ранний выход из функции:

function processData(data: any): string {
  if (!data) {
    return; // выход, возвращает undefined
  }
  
  if (data.error) {
    return; // ещё один выход
  }
  
  return data.value.toString();
}

В этом случае return без значения — явный способ выхода из функции. Это понятнее, чем ничего не писать.

3. Тип функции:

Для функций типа void неважно, есть ли return undefined:

const callback: (x: number) => void = (x) => {
  console.log(x);
  return undefined; // OK
};

const callback2: (x: number) => void = (x) => {
  console.log(x);
  // OK, неявно возвращает undefined
};

Оба варианта работают идентично.

Когда нужно быть аккуратным

Функции, возвращающие значение:

function getValue(): string | undefined {
  if (condition) {
    return undefined; // явно показываем, что значения нет
  }
  return "value";
}

// vs

function getValue2(): string | undefined {
  if (condition) {
    return; // неявно возвращает undefined
  }
  return "value";
}

Оба работают одинаково, но первый вариант более явный и читаемый.

Асинхронные функции

async function fetchData(): Promise<void> {
  await doSomething();
  return undefined; // OK
}

async function fetchData2(): Promise<void> {
  await doSomething();
  // OK, неявно возвращает undefined, обёрнутый в Promise
}

// Оба эквивалентны
const result1 = await fetchData(); // undefined
const result2 = await fetchData2(); // undefined

Стрелочные функции

// Явный return
const func1 = (): undefined => {
  console.log("test");
  return undefined;
};

// Неявный return (блок с фигурными скобками)
const func2 = (): undefined => {
  console.log("test");
};

// Неявный return (выражение)
const func3 = (): undefined => console.log("test");

// Все три версии возвращают undefined

Лучшие практики

Используй return; без значения для:

  • Ранних выходов из функции типа void
  • Команд на остановку выполнения
function validate(data: any): void {
  if (!data) {
    console.error("No data");
    return; // явный выход
  }
  
  if (data.error) {
    console.error(data.error);
    return; // явный выход
  }
  
  process(data);
}

Используй return undefined; для:

  • Функций, явно возвращающих undefined | T
  • Когда хочешь подчеркнуть, что значение отсутствует
  • Для лучшей читаемости в контексте
function findUser(id: number): User | undefined {
  const user = database.find(u => u.id === id);
  
  if (!user) {
    return undefined; // явно показываем отсутствие результата
  }
  
  return user;
}

Просто ничего не пиши для:

  • Функций типа void
  • Функций, которые ничего не должны возвращать
function log(msg: string): void {
  console.log(msg);
  // ничего не писать
}

Вывод

В JavaScript/TypeScript return undefined и отсутствие return — это совершенно эквивалентные операции. Выбор между ними — чистое дело стиля и читаемости. Используй:

  • return; для явного выхода и остановки
  • return undefined; когда нужно явно обозначить отсутствие значения
  • Ничего не пиши для типов void