Рекурсия. Реализуйте рекурсивную функцию для вычисления n-го числа в последовательности Фибоначчи.

function fibonacci(n) {
  if (n <= 2) return 1;
  return fibonacci(n - 1) + fibonacci(n - 2);
}
console.log(fibonacci(10)); // 55

Замыкание. Создайте замыкание, которое возвращает функцию, которая отслеживает, сколько раз она была вызвана.

function createCounter() {
  let count = 0;
  return function() {
    return ++count;
  }
}
const counter = createCounter();
console.log(counter()); // 1
console.log(counter()); // 2

Функции высшего порядка. Используйте метод Array.prototype.map, чтобы удвоить значения массива чисел.

const numbers = [1, 2, 3, 4, 5];
const doubledNumbers = numbers.map(number => number * 2);
console.log(doubledNumbers); // [2, 4, 6, 8, 10]

Асинхронное программирование. Используйте fetch API для извлечения данных из внешнего API и отображения их на странице с помощью Promises и async/await.

async function fetchData() {
  const response = await fetch('https://jsonplaceholder.typicode.com/users');
  const data = await response.json();
  console.log(data);
}
fetchData();

Обработка и делегирование событий. Используйте делегирование событий для обработки событий кликов по нескольким элементам одного класса.

const buttons = document.querySelectorAll('.my-button');
buttons.forEach(button => button.addEventListener('click', handleClick));

function handleClick(event) {
  console.log(event.target.innerText);
}

Сопоставление, фильтрация и уменьшение: используйте метод Array.prototype.filter, чтобы отфильтровать нечисловые значения из массива, а затем используйте метод Array.prototype.reduce для суммирования оставшихся значений.

const mixedArray = [1, 'a', 2, 'b', 3, 'c'];
const numbers = mixedArray.filter(value => typeof value === 'number');
const sum = numbers.reduce((acc, current) => acc + current, 0);
console.log(sum); // 6

Оператор деструктурирования и расширения объекта: используйте деструктурирование объекта для извлечения свойств из объекта и используйте оператор расширения для объединения двух объектов.

const person = { name: 'John', age: 30, occupation: 'Developer' };
const { name, age } = person;
console.log(name, age); // John 30

const object1 = { a: 1, b: 2, c: 3 };
const object2 = { d: 4, e: 5, f: 6 };
const mergedObject = { ...object1, ...object2 };
console.log(mergedObject); // { a: 1, b: 2, c: 3, d: 4, e: 5, f: 6 }

Литералы шаблонов и работа со строками. Используйте литералы шаблонов для создания строки с динамическими значениями и используйте методы обработки строк для форматирования строки.

const name = "John";
const age = 30;
const occupation = "Developer";
const sentence = `My name is ${name} and I am ${age} years old. I am a ${occupation}.`;
console.log(sentence); // My name is John and I am 30 years old. I am a Developer.

const string = "Hello World";
const uppercase = string.toUpperCase();
const lowercase = string.toLowerCase();
console.log(uppercase); // HELLO WORLD
console.log(lowercase); // hello world