# Вопросы по JavaScript на собеседовании для Junior-разработчиков

JavaScript — это один из самых популярных языков программирования, который используется для создания интерактивных элементов на веб-страницах. Если вы собираетесь на собеседование на должность Junior JavaScript разработчика, вам может понадобиться подготовиться к ряду вопросов, которые часто задаются работодателями. В этой статье мы рассмотрим основные темы и примеры вопросов, которые вам могут задать.

## 1. Основы языка JavaScript

### Пример вопроса:
- **Что такое JavaScript?**
 
  **Ответ:** JavaScript — это высокоуровневый, интерпретируемый язык программирования, который позволяет создавать динамические и интерактивные элементы на веб-страницах. Он работает на стороне клиента и может взаимодействовать с HTML и CSS.

### Пример вопроса:
- **Какие основные типы данных существуют в JavaScript?**

  **Ответ:** В JavaScript существуют следующие основные типы данных:
  - Примитивные: `string`, `number`, `boolean`, `undefined`, `null`, `symbol`, `bigint`
  - Ссылочные: объекты (object), массивы (array), функции (function)

## 2. Структуры управления

### Пример вопроса:
- **Как реализовать условный оператор в JavaScript? Приведите примеры.**

  **Ответ:** В JavaScript условные операторы могут быть реализованы с помощью `if`, `else if`, `else`, а также `switch`. Пример использования `if`:

  ```javascript
  const age = 18;
  if (age >= 18) {
      console.log("Вы совершеннолетний.");
  } else {
      console.log("Вы несовершеннолетний.");
  }
  ```

## 3. Функции

### Пример вопроса:
- **Что такое функции в JavaScript? Как их объявить?**

  **Ответ:** Функции — это блоки кода, которые можно вызывать и выполнять многократно. В JavaScript функции могут быть объявлены несколькими способами:

  ```javascript
  // Объявление функции
  function sum(a, b) {
      return a + b;
  }

  // Функциональное выражение
  const multiply = function(a, b) {
      return a * b;
  };

  // Стрелочная функция
  const divide = (a, b) => a / b;
  ```

## 4. Массивы и объекты

### Пример вопроса:
- **Как добавить элемент в массив в JavaScript?**

  **Ответ:** Элемент можно добавить в массив с помощью метода `push()` или с использованием оператора расширения (spread operator):

  ```javascript
  const arr = [1, 2, 3];
  arr.push(4); // добавляет 4 в конец массива
  ```

### Пример вопроса:
- **Как создать объект в JavaScript и как получить доступ к его свойствам?**

  **Ответ:** Объект в JavaScript можно создать с помощью фигурных скобок или конструктора `Object`. Доступ к свойствам осуществляется через точечную нотацию или квадратные скобки:

  ```javascript
  const person = {
      name: 'Alice',
      age: 25
  };

  console.log(person.name); // Alice
  console.log(person['age']); // 25
  ```

## 5. Асинхронное программирование

### Пример вопроса:
- **Что такое промисы и как они работают?**

  **Ответ:** Промис — это объект, представляющий собой промежуточный результат асинхронной операции. Промис может находиться в одном из трех состояний: ожидание (pending), исполнено (fulfilled) или отклонено (rejected).

  ```javascript
  const myPromise = new Promise((resolve, reject) => {
      // Асинхронная операция
      const success = true; // или false
      if (success) {
          resolve("Операция выполнена успешно!");
      } else {
          reject("Произошла ошибка!");
      }
  });

  myPromise.then(result => console.log(result)).catch(error => console.error(error));
  ```

## 6. Углубленные темы

### Пример вопроса:
- **Что такое замыкания в JavaScript?**

  **Ответ:** Замыкание — это функция, которая сохраняет доступ к своему лексическому окружению, даже когда она исполняется вне своего первоначального контекста. Это позволяет сохранять состояние между вызовами функции.

  ```javascript
  function makeCounter() {
      let count = 0;
      return function() {
          count++;
          return count;
      };
  }

  const counter = makeCounter();
  console.log(counter()); // 1
  console.log(counter()); // 2
  ```

## Заключение

Подготовка к собеседованию на должность Junior JavaScript разработчика требует знаний основ языка, умения работать с функциями, массивами, объектами, а также понимания принципов асинхронного программирования. Удачи на собеседовании!