return выходит из функции и передаёт значение обратно вызывающему коду, а throw немедленно останавливает выполнение и распространяет ошибку вверх по стеку вызовов до тех пор, пока её не перехватит блок try/catch.
В синхронном коде throw прерывает обычный поток выполнения:
function divide(a, b) {
if (b === 0) throw new Error("Division by zero");
return a / b;
}
return завершает функцию нормально и возвращает результатthrow пропускает весь оставшийся код и поднимается вверх по стеку вызововcatch не найден, это становится неперехваченным исключением и программа падаетВ async функциях оба ключевых слова влияют на возвращаемый Promise:
return value → резолвит Promise с этим значениемthrow new Error(...) → реджектит Promise с этой ошибкойasync function fetchData() {
if (!isReady) throw new Error("Not ready"); // реджектит Promise
return await getData(); // резолвит Promise
}
Реджект можно обработать с помощью .catch() или await внутри блока try/catch.
return для нормального выхода с ожидаемым результатомthrow для сигнализации об ошибке, которую должен обработать вызывающий кодthrow — это идиоматичный способ зареджектить PromiseВ синхронных функциях throw немедленно останавливает выполнение и передает исключение вверх по стеку вызовов, в то время как return завершает функцию нормально и доставляет результат вызывающей стороне.
Новый — ещё не проверен сообществом
Вы