Что такое функция
Что такое функция
Почему функции - фундамент программирования
Функция в JavaScript - это именованный или безымянный блок кода, который можно вызывать много раз. Она помогает убрать дублирование, сделать код компактнее и разбить большую задачу на понятные части.
Ключевой момент: функция превращает повторяемую логику в переиспользуемый инструмент.
Проверь себя: почему один общий calculateTotal лучше, чем одинаковый расчет в пяти местах?
Базовая идея функции
Функция принимает входные данные (параметры), выполняет логику и возвращает результат.
function getStatus(score) {
if (score >= 70) return 'passed';
return 'retry';
}
console.log(getStatus(80));
Смотри, что важно: один и тот же код работает с разными входами.
Функции могут быть без аргументов
Аргументы не обязательны. Если функции не нужны внешние данные, она может работать без параметров.
function getAppVersion() {
return '1.0.0';
}
console.log(getAppVersion());
Такой формат полезен, когда функция возвращает фиксированное значение или инкапсулирует действие без входа.
Проверь себя: в чем разница между "функция без аргументов" и "функция с аргументами, которые не передали"?
Смотри, что важно:
- если у функции нет параметров, она просто не ожидает именованных входов (лишние аргументы можно передать, но они не попадут ни в один параметр; при необходимости их можно собрать через rest-параметр или
arguments); - если у функции есть параметры, но аргумент не передали, соответствующий параметр станет
undefined.
function noParams() {
return 'ok';
}
function oneParam(name) {
return name === undefined ? 'Привет, гость!' : `Привет, ${name}!`;
}
console.log(noParams(123)); // ok
console.log(oneParam()); // Привет, гость!
Как работает вызов функции
Функция выполняется только в момент вызова. Объявление само по себе код внутри не запускает.
function greet(name) {
console.log(`Привет, ${name}`);
}
greet('Анна');
greet('Илья');
Каждый вызов - это отдельное выполнение с текущими аргументами.
Что делает return
return завершает выполнение функции и отдает значение наружу.
Если return не указан, функция возвращает undefined.
function sum(a, b) {
return a + b;
}
function logOnly(text) {
console.log(text);
}
console.log(sum(2, 3)); // 5
console.log(logOnly('hello')); // undefined
Смотри, что важно: любой код после return в той же ветке уже не выполнится.
Возвращаемое значение можно присваивать переменной
Результат вызова функции - это обычное значение JavaScript. Его можно сохранить в переменную и использовать дальше в вычислениях.
function calcTotal(price, tax) {
return price + tax;
}
const total = calcTotal(100, 20);
console.log(total); // 120
Это базовый и самый частый сценарий: функция возвращает значение, а вызывающий код решает, что с ним делать дальше.
Функция как "контракт"
У функции есть контракт:
- что принимает;
- что возвращает;
- какие правила внутри.
Чем понятнее контракт, тем проще использовать функцию в других модулях без багов.
function formatPrice(value) {
return `${value} ₽`;
}
Где функции встречаются в реальном коде
- валидация формы (
validateEmail); - преобразование данных API (
normalizeUser); - вычисления (
calculateDiscount); - обработчики событий (
handleSubmit).
Мини-сценарий:
function canOpenLesson(isAuth, isPublished) {
return isAuth && isPublished;
}
Такую функцию можно использовать в UI, в тестах и в серверной логике с одинаковым поведением.
Функция и читаемость
Функции помогают дать имя логике.
Плохо:
const status = score >= 70 && hasAttempt ? 'passed' : 'retry';
Лучше:
function getLessonStatus(score, hasAttempt) {
if (!hasAttempt) return 'retry';
return score >= 70 ? 'passed' : 'retry';
}
Здесь часто путаются: "короче" не всегда значит "лучше". Названная функция часто выигрывает по читаемости.
Проверь себя: что проще отлаживать через месяц - выражение в одну строку или отдельную функцию с именем?
Частые ошибки новичков
- Писать функцию, которая делает слишком много разных задач.
- Забывать
returnи получатьundefined. - Давать неинформативные имена (
doIt,processData). - Сильно зависеть от внешних переменных вместо параметров.
Анти-провал: одна функция - одна понятная ответственность.
Что будет, если изменить входные данные
В getStatus:
80->passed;69->retry.
Если случайно передать строку '80', результат может быть корректным из-за приведения, но такой код становится хрупким. Лучше нормализовать входы явно.
Проверь себя: где лучше проверять тип входа - внутри функции или до вызова?
Краткий итог
- Функция - переиспользуемый блок логики.
- Она принимает вход, выполняет действие и возвращает результат.
- Функции уменьшают дублирование и улучшают читаемость.
- Хороший контракт функции делает код стабильнее и проще для тестов.
- Осознанная декомпозиция на функции - один из главных навыков разработчика.