В Figma кнопка "Дублировать" всегда делает одно и то же — копирует выбранный объект. В коде за этой кнопкой стоит функция: написали её один раз, вызываем сколько угодно. На Aliexpress расчёт итоговой цены (товар + доставка + скидка) вынесен в функцию, которая вызывается для каждого товара в корзине.
Функции используют переменные, работают с типами данных и могут содержать условия и циклы.
Без функций придётся копировать один и тот же код везде где он нужен. Изменился расчёт скидки — нужно найти и поправить 50 мест в коде. С функцией — правишь одно место.
Функции решают три проблемы:
1. Повторное использование — написал один раз, вызываешь многократно
2. Читаемость — calculateDiscount() лучше чем 5 строк математики
3. Тестирование — функцию легко проверить на разных входных данных
function functionName(param1, param2) {
// тело функции
return result // возвращаем результат
}
// Вызов
const result = functionName(value1, value2)return функция вернёт undefinedreturn выполнение функции останавливаетсяfunction createOrder(product, quantity = 1, discount = 0) {
const total = product.price * quantity * (1 - discount / 100)
return { product: product.name, quantity, total }
}
createOrder(laptop) // quantity = 1, discount = 0
createOrder(laptop, 2) // quantity = 2, discount = 0
createOrder(laptop, 1, 10) // quantity = 1, discount = 10%Хорошая функция:
return// Нечистая — меняет внешнюю переменную (плохо)
let total = 0
function addToTotal(price) { total += price }
// Чистая — принимает всё что нужно, возвращает результат (хорошо)
function calcTotal(prices) { return prices.reduce((sum, p) => sum + p, 0) }Ошибка 1: Забыть return
function calcDiscount(price, pct) {
const result = price * pct / 100
// забыли return! функция вернёт undefined
}
const discount = calcDiscount(1000, 10)
console.log(discount) // undefined — а не 100!Ошибка 2: Передать аргументы в неверном порядке
function divide(dividend, divisor) { return dividend / divisor }
divide(2, 10) // 0.2 — хотели 10/2 = 5, передали наоборотОшибка 3: Изменять параметр-объект (мутация)
function applyDiscount(product, pct) {
product.price = product.price * (1 - pct / 100) // меняем оригинал!
return product
}
// Правильно: создавай новый объект
function applyDiscount(product, pct) {
return { ...product, price: product.price * (1 - pct / 100) }
}Функции — основной способ организации кода. В реальных проектах каждая функция делает одно конкретное дело ("принцип единственной ответственности"). Функция длиннее 20-30 строк — сигнал разбить её на несколько меньших.
Система расчётов для интернет-магазина
// Чистые функции для расчётов корзины
function calcSubtotal(price, quantity) {
return price * quantity
}
function calcDiscount(subtotal, discountPct) {
return subtotal * (discountPct / 100)
}
function calcShipping(subtotal, freeFrom = 2000) {
return subtotal >= freeFrom ? 0 : 299
}
function calcTotal(price, quantity, discountPct = 0) {
const subtotal = calcSubtotal(price, quantity)
const discount = calcDiscount(subtotal, discountPct)
const shipping = calcShipping(subtotal)
return subtotal - discount + shipping
}
// Форматирование цены для отображения
const formatPrice = (amount) => `${amount.toLocaleString('ru-RU')} ₽`
// Проверяем на разных данных
console.log(formatPrice(calcTotal(500, 1))) // "799 ₽" (500 + 299 доставка)
console.log(formatPrice(calcTotal(500, 5))) // "2 500 ₽" (2500, доставка бесплатно)
console.log(formatPrice(calcTotal(500, 5, 10))) // "2 250 ₽" (скидка 10%)
console.log(formatPrice(calcTotal(15000, 1, 15))) // "12 750 ₽"В Figma кнопка "Дублировать" всегда делает одно и то же — копирует выбранный объект. В коде за этой кнопкой стоит функция: написали её один раз, вызываем сколько угодно. На Aliexpress расчёт итоговой цены (товар + доставка + скидка) вынесен в функцию, которая вызывается для каждого товара в корзине.
Функции используют переменные, работают с типами данных и могут содержать условия и циклы.
Без функций придётся копировать один и тот же код везде где он нужен. Изменился расчёт скидки — нужно найти и поправить 50 мест в коде. С функцией — правишь одно место.
Функции решают три проблемы:
1. Повторное использование — написал один раз, вызываешь многократно
2. Читаемость — calculateDiscount() лучше чем 5 строк математики
3. Тестирование — функцию легко проверить на разных входных данных
function functionName(param1, param2) {
// тело функции
return result // возвращаем результат
}
// Вызов
const result = functionName(value1, value2)return функция вернёт undefinedreturn выполнение функции останавливаетсяfunction createOrder(product, quantity = 1, discount = 0) {
const total = product.price * quantity * (1 - discount / 100)
return { product: product.name, quantity, total }
}
createOrder(laptop) // quantity = 1, discount = 0
createOrder(laptop, 2) // quantity = 2, discount = 0
createOrder(laptop, 1, 10) // quantity = 1, discount = 10%Хорошая функция:
return// Нечистая — меняет внешнюю переменную (плохо)
let total = 0
function addToTotal(price) { total += price }
// Чистая — принимает всё что нужно, возвращает результат (хорошо)
function calcTotal(prices) { return prices.reduce((sum, p) => sum + p, 0) }Ошибка 1: Забыть return
function calcDiscount(price, pct) {
const result = price * pct / 100
// забыли return! функция вернёт undefined
}
const discount = calcDiscount(1000, 10)
console.log(discount) // undefined — а не 100!Ошибка 2: Передать аргументы в неверном порядке
function divide(dividend, divisor) { return dividend / divisor }
divide(2, 10) // 0.2 — хотели 10/2 = 5, передали наоборотОшибка 3: Изменять параметр-объект (мутация)
function applyDiscount(product, pct) {
product.price = product.price * (1 - pct / 100) // меняем оригинал!
return product
}
// Правильно: создавай новый объект
function applyDiscount(product, pct) {
return { ...product, price: product.price * (1 - pct / 100) }
}Функции — основной способ организации кода. В реальных проектах каждая функция делает одно конкретное дело ("принцип единственной ответственности"). Функция длиннее 20-30 строк — сигнал разбить её на несколько меньших.
Система расчётов для интернет-магазина
// Чистые функции для расчётов корзины
function calcSubtotal(price, quantity) {
return price * quantity
}
function calcDiscount(subtotal, discountPct) {
return subtotal * (discountPct / 100)
}
function calcShipping(subtotal, freeFrom = 2000) {
return subtotal >= freeFrom ? 0 : 299
}
function calcTotal(price, quantity, discountPct = 0) {
const subtotal = calcSubtotal(price, quantity)
const discount = calcDiscount(subtotal, discountPct)
const shipping = calcShipping(subtotal)
return subtotal - discount + shipping
}
// Форматирование цены для отображения
const formatPrice = (amount) => `${amount.toLocaleString('ru-RU')} ₽`
// Проверяем на разных данных
console.log(formatPrice(calcTotal(500, 1))) // "799 ₽" (500 + 299 доставка)
console.log(formatPrice(calcTotal(500, 5))) // "2 500 ₽" (2500, доставка бесплатно)
console.log(formatPrice(calcTotal(500, 5, 10))) // "2 250 ₽" (скидка 10%)
console.log(formatPrice(calcTotal(15000, 1, 15))) // "12 750 ₽"Ты пишешь функцию для клипа в видеоредакторе. Функция clamp(value, min, max) ограничивает число в диапазоне от min до max — используется чтобы громкость не вышла за 0-100, прозрачность не вышла за 0-1, и т.д.
Три случая: value < min → return min, value > max → return max, иначе → return value