Какие особенности у функций в JavaScript

Ответ

Функции в JavaScript являются объектами первого класса, что означает их можно:

  1. Присваивать переменным
  2. Передавать как аргументы
  3. Возвращать из других функций

Особенности:

  • Поддерживают замыкания (доступ к внешним переменным)
  • Имеют контекст выполнения (this)
  • Можно вызывать разными способами: func(), new Func(), func.call(), func.apply()
  • Есть Function Declaration и Function Expression
  • У функций есть свойства (name, length) и методы (bind, call, apply)

Пример:

// Function Declaration
function sum(a, b) {
  return a + b;
}

// Function Expression
const multiply = function(a, b) {
  return a * b;
};

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

Ответ 18+ 🔞

А, функции в JavaScript, ну это вообще отдельная песня, блядь! Слушай, представляешь, они там как полноправные граждане, объекты первого класса, ёпта! То есть с ними можно делать всё, что с обычной переменной, только ещё и вызывать, сука!

Вот смотри, что они умеют, эти хитрожопые функции:

  1. Их можно в переменную воткнуть, как морковку в огород.
  2. Засунуть как аргумент в другую функцию — типа «на, подержи, позови когда надо».
  3. А ещё одна функция может другую, как подарочек, наружу выплюнуть и сказать: «Вот, забирай, это твоя новая работяга».

А фишки у них какие, блядь:

  • Замыкания — это вообще магия, ёперный театр! Функция помнит всё, что было вокруг неё в момент рождения, даже если её уже увезли на другой конец программы. Как шпион, блядь, который всё видит и помнит.
  • Контекст (this) — вот это отдельная головная боль, ядрёна вошь! Этот this такой непостоянный, сегодня он один, завтра — другой, в рот меня чих-пых! Всё зависит от того, как функцию позвали.
  • Способы вызова — да их дохуя! Можно просто func(), можно с приставкой new, чтобы объект родить, а можно через call или apply насильно контекст подсунуть. На выбор, как в столовке, блядь.

Ну и создавать их можно по-разному, понимаешь? Вот как:

// Function Declaration — объявил и всё, она уже везде видна, как мать родная.
function sum(a, b) {
  return a + b;
}

// Function Expression — создал и сразу в переменную, скромненько так.
const multiply = function(a, b) {
  return a * b;
};

// Стрелочная функция — модная, короткая, но своенравная: своего this у неё нет, она его у родителей берёт.
const divide = (a, b) => a / b;

Короче, функции в JS — это не просто куски кода, это такие самостоятельные зверушки, блядь, со своим характером, памятью и кучей способов их использовать. Изучай, ебать мои старые костыли, без них тут ни хуя не сделаешь!