Sobes.tech
Junior
114
questionbank

Какие способы создания функций ты знаешь?

Ответ от нейросети

sobes.tech AI

  1. Function Declaration

    // Определение функции
    function greet(name) {
      return `Привет, ${name}!`;
    }
    

    Функции, объявленные таким способом, доступны до строки, где они объявлены (поднятие/hoisting).

  2. Function Expression

    // Присваивание анонимной функции переменной
    const greet = function(name) {
      return `Привет, ${name}!`;
    };
    

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

  3. Arrow Function (Стрелочная функция)

    // Сокращенная запись функции
    const greet = (name) => {
      return `Привет, ${name}!`;
    };
    
    // Для одного параметра скобки можно опустить
    const greet = name => {
      return `Привет, ${name}!`;
    };
    
    // Если тело функции состоит из одного return, можно опустить скобки {} и return
    const greet = name => `Привет, ${name}!`;
    

    Стрелочные функции лексически связывают this, не имеют собственного arguments. Не могут быть конструкторами.

  4. Function Constructor

    // Использование конструктора Function
    const greet = new Function('name', 'return "Привет, " + name + "!";');
    

    Функции создаются динамически, из строки. Не рекомендуется для обычного использования из-за проблем с производительностью (требует двойной парсинг) и безопасностью (использование eval-подобного механизма).

  5. Методы объектов

    // Функция как свойство объекта
    const person = {
      name: 'Иван',
      greet: function() { // Function Expression как метод
        return `Привет, ${this.name}!`;
      },
      sayHello() { // Сокращенная запись метода (ES6)
        return `Привет, ${this.name}!`;
      }
    };
    

    Функции, определенные как свойства объекта. Сокращенная запись (sayHello()) является синтаксическим сахаром для sayHello: function().

  6. Генератор-функции

    // Функция, которая может приостанавливать и возобновлять выполнение
    function* generateNumbers() {
      yield 1;
      yield 2;
      yield 3;
    }
    

    Используют yield для возврата промежуточных значений и создания итераторов. Определяются с помощью синтаксиса function*.

  7. Асинхронные функции (Async functions)

    // Функция, работающая с промисами
    async function fetchData() {
      const response = await fetch('...');
      const data = await response.json();
      return data;
    }
    

    Упрощают работу с асинхронным кодом, позволяют использовать await для ожидания промисов в неблокирующем режиме. Определяются с помощью синтаксиса async function.