← Назад к вопросам

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

1.8 Middle🔥 151 комментариев
#JavaScript Core#Браузер и сетевые технологии

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI3 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

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

Функции в JavaScript — это один из ключевых строительных блоков языка. Это полноценные объекты первого класса, которые обладают уникальными и мощными возможностями.

Основные особенности

1. Функции как объекты первого класса

Функции можно присваивать переменным, передавать как аргументы другим функциям и возвращать из других функций:

// Присваивание переменной
const greet = function() {
  console.log("Hello");
};

// Передача как аргумент
function executeCallback(callback) {
  callback();
}
executeCallback(greet);

// Возврат функции
function createMultiplier(factor) {
  return function(num) {
    return num * factor;
  };
}
const double = createMultiplier(2);
console.log(double(5)); // 10

2. Hoisting (поднятие)

Объявления функций поднимаются на вершину области видимости. Function Declaration полностью поднимаются, включая тело, в то время как Function Expression поднимаются только как переменная (со значением undefined):

// Работает (Function Declaration)
console.log(sum(2, 3)); // 5
function sum(a, b) {
  return a + b;
}

// Ошибка (Function Expression)
console.log(multiply(2, 3)); // TypeError
const multiply = function(a, b) {
  return a * b;
};

3. Замыкания (Closures)

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

function createCounter() {
  let count = 0;
  return function() {
    return ++count;
  };
}

const counter = createCounter();
console.log(counter()); // 1
console.log(counter()); // 2
console.log(counter()); // 3

4. Контекст выполнения (this)

Значение this зависит от того, как функция вызывается:

const obj = {
  name: "Alice",
  greet: function() {
    console.log(this.name); // Alice
  }
};
obj.greet();

const greetFunc = obj.greet;
greetFunc(); // undefined (this привязан к глобальному объекту)

5. Методы привязки контекста

Методы call(), apply() и bind() позволяют контролировать значение this:

function introduce(city, country) {
  console.log(`${this.name} из ${city}, ${country}`);
}

const person = { name: "Bob" };

introduce.call(person, "Москва", "Россия");
introduce.apply(person, ["СПб", "Россия"]);
const boundIntro = introduce.bind(person);
boundIntro("Казань", "Россия");

6. Стрелочные функции (Arrow Functions)

Стрелочные функции имеют лексическое привязание this и более компактный синтаксис:

const numbers = [1, 2, 3];
const doubled = numbers.map(n => n * 2); // [2, 4, 6]

const obj2 = {
  value: 42,
  getValue: function() {
    setTimeout(() => {
      console.log(this.value); // 42 (наследует this из getValue)
    }, 100);
  }
};
obj2.getValue();

7. Параметры по умолчанию и rest-параметры

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

function greetMultiple(greeting = "Hello", ...names) {
  names.forEach(name => console.log(`${greeting}, ${name}!`));
}

greetMultiple("Hi", "Alice", "Bob", "Charlie");

8. Деструктуризация параметров

Можно деструктуризировать объекты и массивы прямо в параметрах функции:

function printUser({ name, age, city = "Unknown" }) {
  console.log(`${name}, ${age} лет, город: ${city}`);
}

printUser({ name: "Alice", age: 30 });

Заключение

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

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