💬 Спрашивают в 3% собеседований
В JavaScript существует несколько способов создания функций. Каждый способ имеет свои особенности и применяется в зависимости от контекста. Рассмотрим основные из них: функциональные выражения, функциональные объявления, стрелочные функции и методы объекта.
1️⃣ Функциональное объявление (Function Declaration)
Это наиболее традиционный способ объявления функции. Функция, объявленная таким образом, доступна во всем блоке кода благодаря поднятию (hoisting).
🤔 Пример:
function greet(name) {
return `Hello, ${name}!`;
}
console.log(greet("Alice")); // "Hello, Alice!"🤔 Особенности:
➕ Функция доступна до своего объявления благодаря поднятию.
➕ Легко читается и используется для создания именованных функций.
2️⃣ Функциональное выражение (Function Expression)
Функция, объявленная как выражение, не поднимается. Такая функция может быть анонимной или именованной.
🤔 Пример:
const greet = function(name) {
return `Hello, ${name}!`;
};
console.log(greet("Bob")); // "Hello, Bob!"🤔 Особенности:
➕ Функция не поднимается, доступна только после её объявления.
➕ Может быть анонимной или именованной.
3️⃣ Стрелочные функции (Arrow Functions)
Стрелочные функции введены в ES6. Они имеют более короткий синтаксис и не имеют своего
this, arguments, super, или new.target.🤔 Пример:
const greet = (name) => `Hello, ${name}!`;
console.log(greet("Charlie")); // "Hello, Charlie!"🤔 Особенности:
➕ Не имеют своего
this, используют значение this из внешнего контекста.➕ Не могут быть использованы в качестве конструкторов.
➕ Подходят для коротких функций и коллбеков.
4️⃣ Методы объекта (Object Methods)
Функции могут быть объявлены как методы объекта. В ES6 для этого используется сокращенный синтаксис.
🤔 Пример:
const person = {
name: "David",
greet() {
return `Hello, ${this.name}!`;
}
};
console.log(person.greet()); // "Hello, David!"🤔 Особенности:
➕ Метод объекта имеет доступ к свойствам объекта через
this.➕ Поддерживается краткий синтаксис в ES6.
5️⃣ Конструкторные функции (Constructor Functions)
Конструкторные функции используются для создания объектов с помощью ключевого слова
new.🤔 Пример:
function Person(name) {
this.name = name;
}
Person.prototype.greet = function() {
return `Hello, ${this.name}!`;
};
const person = new Person("Eve");
console.log(person.greet()); // "Hello, Eve!"🤔 Особенности:
➕ Используются с ключевым словом
new для создания новых объектов.➕ Создают экземпляры объектов с общими методами.
6️⃣ Генераторные функции (Generator Functions)
Генераторные функции возвращают объект-итератор и могут приостанавливать своё выполнение с помощью ключевого слова
yield.🤔 Пример:
function* generateSequence() {
yield 1;
yield 2;
yield 3;
}
const generator = generateSequence();
console.log(generator.next().value); // 1
console.log(generator.next().value); // 2
console.log(generator.next().value); // 3🤔 Особенности:
➕ Возвращают объект-итератор.
➕ Могут приостанавливать и возобновлять выполнение.
🤔 Вкратце:
1️⃣ Функциональное объявление: Классический способ, функция доступна во всём блоке.
2️⃣ Функциональное выражение: Функция объявляется в выражении, не поднимается.
3️⃣ Стрелочные функции: Краткий синтаксис, нет своего
this.4️⃣ Методы объекта: Функции, объявленные внутри объекта.
5️⃣ Конструкторные функции: Используются с
new для создания объектов.6️⃣ Генераторные функции: Возвращают итераторы, могут приостанавливать выполнение.
Короткий ответ: В JavaScript можно создавать функции разными способами: обычные функции, функции внутри переменных, стрелочные функции, функции внутри объектов, функции для создания объектов и специальные функции, которые могут делать паузы.
🔥 ТОП ВОПРОСОВ С СОБЕСОВ
🔒 База собесов | 🔒 База тестовых