Введение
Функции в JavaScript могут не только выполнять определенные действия, но и возвращать значения, которые могут быть использованы в других частях программы. Возврат значений из функции — это важная концепция, позволяющая строить более сложные и многоуровневые программы. В этом уроке мы рассмотрим, как функции возвращают значения, как эти значения можно использовать, и что происходит, если функция не возвращает значение.
Возврат значения с помощью оператора return
Оператор return
используется для возврата значения из функции. Когда функция достигает оператора return
, она прекращает свое выполнение и возвращает указанное значение.
Пример функции, возвращающей значение:
function sum(a, b) {
return a + b;
}
let result = sum(3, 4);
console.log(result); // 7
Особенности:
- Оператор return завершает выполнение функции.
- Код, следующий после оператора return, не выполняется.
Возврат нескольких значений
Функция может возвращать только одно значение. Однако, вы можете возвращать массивы или объекты, чтобы вернуть несколько значений.
Пример возвращения массива:
function getCoordinates() {
return [50, 100];
}
let coords = getCoordinates();
console.log(coords[0]); // 50
console.log(coords[1]); // 100
Пример возвращения объекта:
function createUser(name, age) {
return {
name: name,
age: age
};
}
let user = createUser("Иван", 25);
console.log(user.name); // Иван
console.log(user.age); // 25
Функции без возврата значения
Если функция не имеет оператора return
, она возвращает undefined по умолчанию.
Пример функции без возврата значения:
function greet(name) {
console.log("Привет, " + name + "!");
}
let result = greet("Иван");
console.log(result); // undefined
Вложенные вызовы функций
Вы можете использовать возвращаемые значения функции в других функциях или выражениях.
Пример вложенных вызовов функций:
function add(a, b) {
return a + b;
}
function multiply(a, b) {
return a * b;
}
let result = multiply(add(2, 3), 4);
console.log(result); // 20
Пример комплексного использования
Пример функции, возвращающей объект с несколькими значениями и использованием этих значений:
function getUserData(name, birthYear) {
let age = new Date().getFullYear() - birthYear;
return {
name: name,
age: age
};
}
let user = getUserData("Анна", 1990);
console.log(user.name); // Анна
console.log(user.age); // текущий возраст, вычисленный на основе года рождения
Заключение
Возврат значений из функций — это мощный инструмент, который позволяет создавать более сложные и гибкие программы. Понимание того, как возвращать значения, использовать их и работать с функциями, не возвращающими значения, является ключевым аспектом в эффективном программировании на JavaScript.
Контрольные вопросы
Что делает оператор return
в функции?
- Завершает выполнение функции и возвращает указанное значение.
- Выводит значение в консоль.
- Приостанавливает выполнение функции.
- Инициализирует переменную.
Что произойдет, если функция не имеет оператора return
?
- Функция вернет
null
. - Функция вернет
undefined
. - Функция вызовет ошибку.
- Функция ничего не вернет и не завершится.
Как вернуть несколько значений из функции?
- Вернуть массив или объект, содержащий несколько значений.
- Использовать несколько операторов
return
. - Использовать оператор
break
. - Вернуть строку с разделителями.
Какой результат будет у функции sum
, если ее объявить как function sum(a, b) { return a + b; }
и вызвать как sum(3, 4)
?
- 7*
- 34
undefined
null
Что произойдет, если в функции есть код после оператора return?
- Код после оператора
return
не будет выполнен. - Код после оператора
return
выполнится до возврата значения. - Код после оператора
return
выполнится только в случае ошибки. - Код после оператора
return
выполнится при следующем вызове функции.
Как использовать возвращаемое значение функции в другом выражении?
- Вызвать функцию внутри другого выражения или функции.
- Использовать оператор
return
в вызывающей функции. - Сохранить значение в глобальной переменной.
- Использовать оператор
break
.
Упражнения
Конечно, добавим необходимые пояснения и формулы к каждому упражнению:
Упражнение 1: Квадратный корень методом Ньютона (без использования Math)
Создайте функцию sqrt
, которая принимает число и возвращает его квадратный корень, используя метод Ньютона для приближения.
Формула:
Метод Ньютона использует итеративное приближение:
function sqrt(n) {
let x = n;
let y = 1;
let e = 0.000001; // точность
while (x - y > e) {
x = (x + y) / 2;
y = n / x;
}
return x;
}
console.log(sqrt(16)); // приблизительно 4
console.log(sqrt(25)); // приблизительно 5
Упражнение 2: Нахождение наименьшего общего кратного
Создайте функцию lcm
, которая принимает два числа и возвращает их наименьшее общее кратное (НОК).
Формула:
НОК можно найти через НОД (наибольший общий делитель):
function gcd(a, b) {
while (b !== 0) {
let temp = b;
b = a % b;
a = temp;
}
return a;
}
function lcm(a, b) {
return (a * b) / gcd(a, b);
}
console.log(lcm(4, 6)); // 12
console.log(lcm(15, 20)); // 60
Упражнение 3: Перевод числа в двоичную систему
Создайте функцию toBinary
, которая принимает число и возвращает строку, представляющую это число в двоичной системе.
Пояснение:
Двоичная система использует только цифры 0 и 1. Чтобы перевести число в двоичную систему, нужно делить его на 2 и записывать остатки.
function toBinary(num) {
let binary = '';
while (num > 0) {
binary = (num % 2) + binary;
num = (num - num % 2) / 2; // эквивалент Math.floor(num / 2)
}
return binary || '0';
}
console.log(toBinary(10)); // "1010"
console.log(toBinary(255)); // "11111111"
Упражнение 4: Нахождение чисел Фибоначчи
Создайте функцию fibonacci
, которая принимает число n
и возвращает n
-е число Фибоначчи.
Формула:
Последовательность Фибоначчи определяется рекуррентным соотношением:
function fibonacci(n) {
let a = 0, b = 1, temp;
if (n === 0) return a;
for (let i = 2; i <= n; i++) {
temp = a + b;
a = b;
b = temp;
}
return b;
}
console.log(fibonacci(10)); // 55
console.log(fibonacci(15)); // 610
Упражнение 5: Обратный порядок строки
Создайте функцию reverseString
, которая принимает строку и возвращает эту строку в обратном порядке.
Пояснение:
Переворот строки заключается в чтении её символов в обратном порядке и формировании новой строки.
function reverseString(str) {
let reversed = '';
for (let i = str.length - 1; i >= 0; i--) {
reversed += str[i];
}
return reversed;
}
console.log(reverseString("hello")); // "olleh"
console.log(reverseString("JavaScript")); // "tpircSavaJ"
Упражнение 6: Проверка кратности числа
Создайте функцию isMultiple
, которая принимает два числа и возвращает true
, если первое число кратно второму, и false
в противном случае.
Формула:
Число ( a ) кратно числу ( b ), если остаток от деления ( a ) на ( b ) равен нулю:
function isMultiple(a, b) {
return a % b === 0;
}
console.log(isMultiple(10, 5)); // true
console.log(isMultiple(10, 3)); // false
Упражнение 7: Подсчет количества гласных в строке
Создайте функцию countVowels
, которая принимает строку и возвращает количество гласных в этой строке.
Пояснение:
Гласные буквы в английском языке: a, e, i, o, u. Подсчет гласных включает проверку каждого символа строки на принадлежность к множеству гласных.
function countVowels(str) {
let count = 0;
let vowels = "aeiouAEIOU";
for (let i = 0; i < str.length; i++) {
if (vowels.includes(str[i])) {
count++;
}
}
return count;
}
console.log(countVowels("hello")); // 2
console.log(countVowels("JavaScript")); // 3
Упражнение 8: Проверка на палиндром числа
Создайте функцию isNumericPalindrome
, которая принимает число и возвращает true
, если число является палиндромом, и false
в противном случае.
Пояснение:
Число является палиндромом, если оно читается одинаково слева направо и справа налево.
function isNumericPalindrome(num) {
let str = num.toString();
let reversed = '';
for (let i = str.length - 1; i >= 0; i--) {
reversed += str[i];
}
return str === reversed;
}
console.log(isNumericPalindrome(121)); // true
console.log(isNumericPalindrome(123)); // false
Упражнение 9: Вычисление факториала числа рекурсивно
Создайте функцию factorialRecursive
, которая принимает число и возвращает его факториал, используя рекурсию.
Формула:
Факториал числа ( n ) определяется как:
function factorialRecursive(n) {
if (n === 0 || n === 1) {
return 1;
}
return n * factorialRecursive(n - 1);
}
console.log(factorialRecursive(5)); // 120
console.log(factorialRecursive(7)); // 5040
Упражнение 10: Определение типа треугольника
Создайте функцию triangleType
, которая принимает три длины сторон треугольника и возвращает тип треугольника: «равносторонний», «равнобедренный» или «разносторонний».
Пояснение:
- Равносторонний треугольник: все три стороны равны.
- Равнобедренный треугольник: две стороны равны.
- Разносторонний треугольник: все стороны различны.
function triangleType(a, b, c) {
if (a === b && b === c) {
return "равносторонний";
} else if (a === b || b === c || a === c) {
return "равнобедренный";
} else {
return "разносторонний";
}
}
console.log(triangleType(3, 3, 3)); // "равносторонний"
console.log(triangleType(3, 3, 4)); // "равнобедренный"
console.log(triangleType(3, 4, 5)); // "разносторонний"