JS Tower
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}

Проверь себя

  1. Что такое hoisting?
  2. Чем стрелочная функция отличается от обычной?
  3. Как вернуть объект из стрелочной функции?