Чем отличаются `throw` и `return` в своём поведении при обработке ошибок и управлении потоком выполнения в JavaScript, особенно в синхронных функциях и async функциях? — ДейлиПреп