JavaScript & TypeScriptМодуль 2: Функции
Объявление функций
Способы создания функций в JavaScript
Цель урока
В этом уроке ты научишься:
- Создавать функции разными способами
- Понимать разницу между ними
- Выбирать подходящий способ
Function Declaration
Классический способ объявления функции:
function greet(name) {
return "Привет, " + name + "!";
}
console.log(greet("Иван")); // "Привет, Иван!"Hoisting (поднятие)
Function Declaration поднимается — можно вызвать до объявления:
sayHello(); // "Привет!" — работает
function sayHello() {
console.log("Привет!");
}Function Expression
Функция как значение переменной:
const greet = function(name) {
return "Привет, " + name + "!";
};
console.log(greet("Мария")); // "Привет, Мария!"Без hoisting
// sayHello(); // Ошибка! Нельзя вызвать до объявления
const sayHello = function() {
console.log("Привет!");
};
sayHello(); // РаботаетСтрелочные функции
Современный короткий синтаксис:
const greet = (name) => {
return "Привет, " + name + "!";
};
// Короткая форма (одно выражение)
const greet = (name) => "Привет, " + name + "!";
// Один параметр — без скобок
const double = x => x * 2;
// Без параметров — пустые скобки
const sayHi = () => console.log("Привет!");Особенности стрелочных функций
// Неявный return (без фигурных скобок)
const add = (a, b) => a + b;
// Возврат объекта — нужны скобки
const createUser = (name) => ({ name: name, id: 1 });Важно
Стрелочные функции не имеют своего this. Это важно при работе с объектами (изучим позже).
Сравнение способов
| Способ | Hoisting | Свой this | Синтаксис |
|---|---|---|---|
| Declaration | Да | Да | function name() {} |
| Expression | Нет | Да | const name = function() {} |
| Arrow | Нет | Нет | const name = () => {} |
Когда что использовать
// Declaration — основные функции
function calculateTotal(items) {
// ...
}
// Arrow — короткие функции, callbacks
const numbers = [1, 2, 3];
const doubled = numbers.map(n => n * 2);
// Expression — когда нужно присвоить переменной
const handler = function(event) {
// ...
};Именованные Function Expression
const factorial = function fact(n) {
if (n <= 1) return 1;
return n * fact(n - 1); // можно вызвать себя по имени
};
console.log(factorial(5)); // 120
// fact(5); // Ошибка! fact не доступна снаружиПрактика
Задание 1: Function Declaration
Задача: Создай функцию square, которая возвращает квадрат числа.
Запустите код для проверки
Loading...
Ваш вывод:
Ожидаемый результат:
25
Задание 2: Стрелочная функция
Задача: Создай стрелочную функцию isEven, которая проверяет чётность.
Запустите код для проверки
Loading...
Ваш вывод:
Ожидаемый результат:
true false
Задание 3: Возврат объекта
Задача: Создай стрелочную функцию createPerson, возвращающую объект с именем и возрастом.
Запустите код для проверки
Loading...
Ваш вывод:
Ожидаемый результат:
{"name":"Иван","age":25}Проверь себя
- Что такое hoisting?
- Чем стрелочная функция отличается от обычной?
- Как вернуть объект из стрелочной функции?