Что такое return и возвращаемое значение — и почему console.log ничего не возвращает

Ты пишешь функцию, которая считает сумму корзины. Запускаешь — в консоли красиво печатается 1500. Кладёшь результат в переменную — а там undefined.
Функция же посчитала! Ты сам видел число. Да, видел. Но функция его показала, а не отдала. Это две разные вещи, и разницу между ними держит одно слово — return.
Что такое возвращаемое значение
Функция — это маленькая машинка. Ты кладёшь в неё что-то на входе (это параметры), она работает и выдаёт результат на выходе. Вот этот результат и есть возвращаемое значение. А return — команда «вот ответ, забирай».
function double(n) {
return n * 2
}
const result = double(21) // в result лежит 42
Представь пневмопочту в старом банке. Ты кладёшь записку в капсулу, отправляешь наверх. Через минуту капсула прилетает обратно — с ответом. return — это и есть обратный полёт капсулы. Нет return — капсула не вернётся. Ладонь останется пустой.
Почему console.log — это не return
А теперь та самая ловушка:
function total(prices) {
let sum = 0
for (const p of prices) sum += p
console.log(sum) // печатает 1500
}
const t = total([500, 1000]) // t === undefined
console.log выводит значение на экран для тебя. Как если бы ответ зачитали вслух по громкой связи. Ты услышал — но капсула обратно не прилетела, и коду нечего положить в переменную.
Если функция закончилась без return, JavaScript сам подставляет ответ undefined — «ничего не вернули». Починка — одна строчка:
return sum
Проверка на будущее: если значение видно в консоли, но в переменной undefined — первым делом ищи, есть ли return в самой функции. Похожая история бывает с запросами к серверу — её мы разобрали в статье почему fetch возвращает undefined.
return ещё и останавливает функцию
Вторая суперсила return, о которой забывают: после него функция сразу заканчивается. Всё, что ниже, не выполнится.
function checkAge(age) {
if (age < 18) {
return "Рано"
}
return "Добро пожаловать"
}
Если возраст меньше 18, функция отдаёт «Рано» и выходит. До второго return дело не дойдёт. Это удобно: код от ИИ часто начинается с таких «ранних выходов» — сначала отсечь плохие случаи, потом спокойно заниматься хорошим.
Обратная сторона: код, случайно оставленный после return, никогда не сработает. Если ты вставил что-то в функцию, а оно «не выполняется» — проверь, нет ли return выше.
Три места, где return теряется чаще всего
1. Стрелочная функция с фигурными скобками.
const double = n => n * 2 // возвращает сам
const double2 = n => { n * 2 } // вернёт undefined!
Без скобок стрелка возвращает результат автоматически. Со скобками — только если написать return явно.
2. return внутри forEach. Он возвращает из маленькой внутренней функции, а не из твоей большой. Цикл не прервётся, наружу ничего не выйдет. Чем forEach отличается от map и обычного цикла, подробно — в статье цикл или map.
3. return внутри колбэка. Если функция отдаёт результат через колбэк или ждёт ответа сервера, простой return снаружи вернёт пустоту — ответ ещё не пришёл.
Приём: читай чужую функцию с return
Вот навык, который пригодится каждый день. ИИ выдал тебе функцию на сорок строк, и непонятно, что она делает. Не читай сверху вниз. Найди все return — и сразу увидишь, что функция может ответить.
- Один
returnв конце — функция считает и отдаёт один результат. - Несколько
returnв начале — это проверки: «если что-то не так — выходим». - Ни одного
return— функция ничего не отдаёт, она только что-то делает: рисует, сохраняет, отправляет.
За пять секунд ты понял форму ответа. Дальше читать середину уже проще: ты знаешь, к чему она ведёт.
Когда ты встретишь return
В каждом втором файле. Функции, которые что-то считают, форматируют дату, проверяют форму — все они отдают результат через return. В React компонент тоже возвращает — кусок интерфейса:
function Hello() {
return <h1>Привет!</h1>
}
Забыл return в компоненте — экран пустой, и никакой ошибки.
Может функция вернуть два значения сразу?
Напрямую — нет, return отдаёт одно значение. Но это может быть массив или объект: return { sum, count }. Так упаковывают сколько угодно ответов в одну капсулу.
Обязательно ли каждой функции нужен return?
Нет. Если функция просто что-то делает — показывает окно, сохраняет файл — ответ ей не нужен. return нужен, когда результат работы пойдёт дальше в код.
Что вернёт пустой return?
Строчка return без значения просто останавливает функцию и возвращает undefined. Её используют для раннего выхода, когда ответ не важен.
Короткие уроки-истории, симулятор агента и ежедневная практика — в нашем мобильном приложении. Бесплатно.





