Представьте, что у вас есть красивый, стильный дом (HTML + CSS), но в нём ничего не работает: выключатели не включают свет, двери не открываются, вода не течёт. JavaScript — это электричество, сантехника и умные системы, которые делают дом жилым и удобным.

Что такое JavaScript и зачем он нужен?

JavaScript — это язык программирования для веб-разработки. В отличие от HTML (структура) и CSS (внешний вид), JavaScript добавляет интерактивность, логику и динамическое поведение.

Интерактивность

Кнопки, формы, слайдеры, модальные окна — всё это работает на JavaScript

Динамика

Контент может меняться без перезагрузки страницы

Работа с данными

Отправка форм, валидация, работа с API, localStorage

Важно: JavaScript работает в браузере пользователя (клиентская часть), но также может работать и на сервере (Node.js).

Основы синтаксиса: переменные и типы данных

JavaScript имеет простой и понятный синтаксис. Давайте начнём с основ:

Базовый синтаксис JavaScript
// Переменные (современный способ)
let name = "Алексей";
const age = 30;
var oldWay = "устаревший способ"; // не используйте var

// Типы данных
let string = "Текст в кавычках";
let number = 42;
let boolean = true; // или false
let array = [1, 2, 3, "текст", true];
let object = {
    name: "Иван",
    age: 25,
    isAdmin: true
};

// Вывод в консоль (для отладки)
console.log("Привет, " + name);
console.log(`Мне ${age} лет`); // шаблонные строки

Современный подход: Всегда используйте const для значений, которые не меняются, и let для переменных, которые будут изменяться. Избегайте устаревшего var.

Функции: многократное использование кода

Функции — это фундаментальный строительный блок JavaScript. Они позволяют писать код один раз и использовать его много раз.

Разные способы объявления функций
// 1. Обычная функция (Function Declaration)
function greet(name) {
    return `Привет, ${name}!`;
}

// 2. Функциональное выражение (Function Expression)
const greet = function(name) {
    return `Привет, ${name}!`;
};

// 3. Стрелочная функция (современный способ)
const greet = (name) => {
    return `Привет, ${name}!`;
};

// 4. Сокращенная стрелочная функция
const greet = name => `Привет, ${name}!`;

// Использование функции
console.log(greet("Мария")); // Привет, Мария!

// Функция с несколькими параметрами
const calculateTotal = (price, quantity) => {
    return price * quantity;
};

Обычные функции

function name()

Поднимаются вверх (можно вызывать до объявления). Хороши для основных, именованных функций.

Стрелочные функции

() => {}

Современный синтаксис. Нет своего this. Идеальны для колбэков и коротких функций.

Параметры

(param1, param2)

Данные, которые передаются в функцию. Могут иметь значения по умолчанию: (name = "Гость").

Работа с DOM: как взаимодействовать со страницей

DOM (Document Object Model) — это программное представление HTML-страницы. JavaScript может изменять DOM, чтобы динамически обновлять контент.

Основные методы работы с DOM
// 1. Поиск элементов
const button = document.getElementById('myButton');
const items = document.querySelectorAll('.item');
const header = document.querySelector('header');

// 2. Изменение контента
button.textContent = 'Нажми меня';
header.innerHTML = '

Новый заголовок

'; // 3. Изменение стилей button.style.backgroundColor = 'blue'; button.style.color = 'white'; button.style.padding = '10px 20px'; // 4. Добавление/удаление классов button.classList.add('active'); button.classList.remove('disabled'); button.classList.toggle('hidden'); // переключает класс // 5. Создание новых элементов const newDiv = document.createElement('div'); newDiv.textContent = 'Я новый элемент!'; document.body.appendChild(newDiv); // 6. Удаление элементов const elementToRemove = document.getElementById('oldElement'); elementToRemove.remove();

Безопасность: Будьте осторожны с innerHTML — он может быть уязвим для XSS-атак. Для простого текста используйте textContent.

События: реагируем на действия пользователя

События — это основа интерактивности. Клики, наведение мыши, ввод текста, отправка форм — всё это события, на которые JavaScript может реагировать.

Работа с событиями в JavaScript
// 1. Находим элемент
const button = document.getElementById('myButton');
const input = document.getElementById('myInput');
const form = document.getElementById('myForm');

// 2. Добавляем обработчик события клика
button.addEventListener('click', function() {
    alert('Кнопка нажата!');
});

// 3. Событие ввода текста
input.addEventListener('input', function(event) {
    console.log('Пользователь вводит:', event.target.value);
});

// 4. Событие отправки формы
form.addEventListener('submit', function(event) {
    event.preventDefault(); // предотвращаем перезагрузку страницы
    console.log('Форма отправлена!');
    // здесь будет код для отправки данных на сервер
});

// 5. Событие наведения мыши
button.addEventListener('mouseenter', function() {
    button.style.backgroundColor = 'darkblue';
});

button.addEventListener('mouseleave', function() {
    button.style.backgroundColor = 'blue';
});

// 6. Современная стрелочная функция
button.addEventListener('click', () => {
    console.log('Стрелочная функция работает!');
});
1

addEventListener

Современный способ добавления обработчиков. Можно добавить несколько обработчиков на одно событие.

2

event.preventDefault()

Отменяет стандартное поведение браузера (например, отправку формы или переход по ссылке).

3

event.target

Ссылка на элемент, который вызвал событие. Полезно для обработки событий на нескольких элементах.

4

Делегирование событий

Добавление обработчика на родителя для обработки событий на динамически созданных дочерних элементах.

Практика: создаем интерактивную галерею

Давайте создадим простую интерактивную галерею изображений, используя изученные техники:

HTML структура галереи
<div class="gallery">
    <div class="gallery-main">
        <img id="mainImage" src="image1.jpg" alt="Основное изображение">
    </div>
    
    <div class="gallery-thumbnails">
        <img class="thumbnail active" src="image1.jpg" data-full="image1.jpg" alt="Изображение 1">
        <img class="thumbnail" src="image2-thumb.jpg" data-full="image2.jpg" alt="Изображение 2">
        <img class="thumbnail" src="image3-thumb.jpg" data-full="image3.jpg" alt="Изображение 3">
        <img class="thumbnail" src="image4-thumb.jpg" data-full="image4.jpg" alt="Изображение 4">
    </div>
    
    <div class="gallery-controls">
        <button id="prevBtn">◀ Назад</button>
        <button id="nextBtn">Вперёд ▶</button>
    </div>
</div>
JavaScript код галереи
// Находим все необходимые элементы
const mainImage = document.getElementById('mainImage');
const thumbnails = document.querySelectorAll('.thumbnail');
const prevBtn = document.getElementById('prevBtn');
const nextBtn = document.getElementById('nextBtn');

let currentIndex = 0;

// Функция для обновления основного изображения
function updateMainImage(index) {
    const thumbnail = thumbnails[index];
    const fullImage = thumbnail.getAttribute('data-full');
    
    // Обновляем основное изображение
    mainImage.src = fullImage;
    mainImage.alt = thumbnail.alt;
    
    // Обновляем активный класс у миниатюр
    thumbnails.forEach(thumb => thumb.classList.remove('active'));
    thumbnail.classList.add('active');
    
    // Обновляем текущий индекс
    currentIndex = index;
}

// Обработчики для миниатюр
thumbnails.forEach((thumbnail, index) => {
    thumbnail.addEventListener('click', () => {
        updateMainImage(index);
    });
});

// Кнопка "Назад"
prevBtn.addEventListener('click', () => {
    let newIndex = currentIndex - 1;
    if (newIndex < 0) {
        newIndex = thumbnails.length - 1; // переходим к последнему
    }
    updateMainImage(newIndex);
});

// Кнопка "Вперёд"
nextBtn.addEventListener('click', () => {
    let newIndex = currentIndex + 1;
    if (newIndex >= thumbnails.length) {
        newIndex = 0; // переходим к первому
    }
    updateMainImage(newIndex);
});

// Автопрокрутка каждые 5 секунд
setInterval(() => {
    let newIndex = currentIndex + 1;
    if (newIndex >= thumbnails.length) {
        newIndex = 0;
    }
    updateMainImage(newIndex);
}, 5000);

Что дальше? Современный JavaScript

Освоив основы JavaScript, вы можете перейти к более продвинутым концепциям и современным инструментам:

1

ES6+ (современный синтаксис)

Стрелочные функции, шаблонные строки, деструктуризация, spread/rest операторы, классы.

2

Асинхронность

Promise, async/await для работы с API, таймерами и операциями, требующими времени.

3

Фреймворки и библиотеки

React, Vue, Angular для создания сложных одностраничных приложений (SPA).

4

Инструменты разработки

Webpack, npm, ESLint, TypeScript для профессиональной разработки.

Ключевые выводы:

JavaScript добавляет интерактивность и логику к HTML/CSS
Используйте const и let вместо var
Стрелочные функции — современный стандарт
DOM позволяет динамически изменять страницу
События — основа взаимодействия с пользователем
Практикуйтесь на реальных проектах

JavaScript — это мост между статичным контентом и полноценным веб-приложением. Он превращает посетителя в активного пользователя. Начните с простых скриптов, постепенно усложняйте задачи, и вскоре вы сможете создавать интерактивные интерфейсы, которые удивят и ваших пользователей, и вас самих.

Нужен интерактивный сайт с современными функциями?

Digital Greatness создаёт сайты с продуманной JavaScript-логикой: формы обратной связи, интерактивные калькуляторы, динамические фильтры и многое другое.

Обсудить интерактивные возможности