Функции
Функция (function) - это блок кода, который определяется один раз и может быть вызван многократно. Функции позволяют упростить код, сделать его более читаемым и поддерживаемым. В JavaScript функции м огут быть объявлены и вызваны в любом месте программы, включая другие функции.
Функции (Functions) - ключевая концепция в JavaScript. Важнейшей особенностью языка является поддержка функции первого класса (functions as first-class citizen). Любая функция это объект, и следовательно ею можно манипулировать как объектом, в частности:
- Передавать как аргумент и возвращать в качестве результата при вызове других функций функций высшего порядка;
- Создавать анонимно и присваивать в качестве значений переменных или свойств объектов.
Это определяет высокую выразительную мощность JavaScript и позволяет относить его к числу языков, реализующих функциональную парадигму программирования.
Объявление функции
Объявление функции (function definition, или function declaration, или function statement) состоит из ключевого слова function и следующих частей:
- Имя функции (идентификатор), которое должно быть уникальным в рамках области видимости;
- Список параметров в круглых скобках
()
; - Тело функции в фигурных скобках
{}
.
Синтаксис объявления функции:
function имяФункции(параметр1, параметр2, ..., параметрN) {
// тело функции
}
Пример объявления функции:
function showMessage(message) {
console.log(message);
}
Функции как выражения
Функции могут быть объявлены как выражения (function expression). В этом случае функция не имеет имени (анонимная функция) и присваивается переменной.
const showMessage = function (message) {
console.log(message);
};
showMessage("Hello, World!");
Или функция может быть объявлена как стрелочная функция (arrow function).
const showMessage = (message) => {
console.log(message);
};
showMessage("Hello, World!");
Вызов функции
Вызов функции (function call, или function invocation) - это процесс выполнения кода функции. Для вызова функции используется имя функции, за которым следуют круглые скобки ()
. Если функция принимает параметры, то их значения передаются в круглых скобках.
function sayHello() {
console.log("Hello, World!");
}
function showMessage(message) {
console.log(message);
}
sayHello(); // вызов функции без параметров
showMessage("Hello, World!"); // вызов функции с параметром
Параметры функции
Параметры функции - это переменные, которые определяются в круглых скобках при объявлении функции. Параметры функции используются для передачи значений в функцию при ее вызове. Параметры функции являются локальными переменными, доступными только внутри функции.
function showMessage(message) {
console.log(message);
}
Параметры по умолчанию
Параметры функции могут иметь значения по умолчанию, которые используются, если при вызове функции не переданы значения для этих параметров.
function showMessage(message = "Hello, World!") {
console.log(message);
}
showMessage(); // Hello, World!
showMessage("Hello, JavaScript!"); // Hello, JavaScript!
Важно помнить, что параметры со значением по умолчанию должны идти после параметров без значения по умолчанию.
function showMessage(message, count = 1) {
for (let i = 0; i < count; i += 1) {
console.log(message);
}
}
showMessage("Hello, World!"); // Hello, World!
showMessage("Hello, JavaScript!", 3); // Hello, JavaScript!
Если параметр по умолчанию идет перед параметром без значения по умолчанию, то это вызовет ошибку.
function showMessage(count = 1, message) {
// SyntaxError: Unexpected token '='
for (let i = 0; i < count; i += 1) {
console.log(message);
}
}
Оператор расширения (rest operator)
Оператор расширения (rest operator) позволяет передавать переменное количество аргументов в функцию. Оператор расширения представляется тремя точками ...
перед именем параметра. При этом все аргументы, переданные в функцию, собираются в массив.
function sum(...args) {
let total = 0;
for (const arg of args) {
total += arg;
}
return total;
}
сonsole.log(sum(1, 2, 3)); // 6
сonsole.log(sum(1, 2, 3, 4, 5)); // 15
Оператор расширения (spread operator)
Оператор расширения (spread operator) позволяет передавать элементы массива в качестве аргументов функции. Оператор расширения представляется тремя точками ...
перед именем массива. При этом каждый элемент массива передается в функцию как отдельный аргумент.
function sum(a, b, c) {
return a + b + c;
}
const numbers = [1, 2, 3];
console.log(sum(...numbers)); // 6
Важно помнить, что оператор расширения должен быть последним в списке параметров функции.
function sum(a, b, ...args) {
let total = a + b;
for (const arg of args) {
total += arg;
}
return total;
}
В противном случае это вызовет ошибку.
function sum(...args, a, b) { // SyntaxError: Rest parameter must be last formal parameter
let total = 0;
for (const arg of args) {
total += arg;
}
return total + a + b;
}
Деструктуризация параметров
Деструктуризация параметров (destructuring parameters) позволяет извлекать значения из объектов и массивов и использовать их как параметры функции.
function showUser({ name, age }) {
console.log(`Name: ${name}, Age: ${age}`);
}
const user = {
name: "Alice",
age: 25,
};
showUser(user); // Name: Alice, Age: 25
Ключевое слово return
Возвращаемое значение (return value) - это значение, которое возвращает функция после выполнения своего кода. Возвращаемое значение функции определяется ключевым словом return
, за которым следует значение, которое функция возвращает.
function sum(a, b) {
return a + b;
}
const total = sum(2, 3);
console.log(total); // 5
Если функция не возвращает значение, то она возвращает undefined
.
function showMessage(message) {
console.log(message);
}
const result = showMessage("Hello, World!");
console.log(result); // undefined
Важно помнить, что после выполнения оператора return
функция завершает свою работу и возвращается к месту вызова, что означает, что код, написанный после оператора return
, не будет выполнен.
function sum(a, b) {
return a + b;
console.log("This code will not be executed"); // Этот код не будет выполнен
}
const total = sum(2, 3);
console.log(total); // 5