Пусть у нас есть функция, которая выводит на экран квадрат переданного числа:
function func(num) {
alert(num * num);
}
func(3); // выведет 9
Пусть мы хотим не выводить значение на экран, а записать в какую-нибудь переменную, вот так:
let result = func(3); // в переменной result теперь 9
Для этого в JavaScript существует специальная
инструкция return
, которая позволяет
указать значение, которое возвращает
функция. Под словом "возвращает" понимают
то значение, которое запишется в переменную,
если ей присвоить вызванную функцию.
Итак, давайте перепишем нашу функцию так, чтобы она не выводила результат на экран, а возвращала его в переменную:
function func(num) {
return num * num;
}
let result = func(3); // в переменной result теперь 9
После того, как данные записаны в переменную, их можно, например, вывести на экран:
function func(num) {
return num * num;
}
let result = func(3);
alert(result); // выведет 9
А можно сначала как-то изменить эти данные, а затем вывести их на экран:
function func(num) {
return num * num;
}
let result = func(3);
result = result + 1;
alert(result); // выведет 10
Можно сразу выполнять какие-то действия с результатом работы функции перед записью в переменную:
function func(num) {
return num * num;
}
let result = func(3) + 1;
alert(result); // выведет 10
А можно не записывать результат в переменную, а сразу вывести его на экран:
function func(num) {
return num * num;
}
alert(func(3)); // выведет 9
Сделайте функцию, которая параметром принимает
число, а возвращает куб этого числа. С помощью
этой функции найдите куб числа 3
и
запишите его в переменную result
.
Использование функций в выражении
В следующем примере с помощью функции func
мы сначала найдем квадрат числа 2
,
а затем - 3
квадрат числа, сложим
эти значения и запишем в переменную:
function func(num) {
return num * num;
}
let result = func(2) + func(3);
alert(result); // выведет 13
Сделайте функцию, которая параметром принимает
число, а возвращает квадратный корень из
этого числа. С помощью этой функции найдите
корень числа 3
, затем найдите корень
числа 4
. Просуммируйте полученные
результаты и выведите их на экран.
Функции в функциях
Можно также результат работы одной функции
передать параметром в другую, например, вот
так мы сначала найдем квадрат числа 2
,
а затем квадрат результата:
function func(num) {
return num * num;
}
let result = func(func(2));
alert(result); // выведет 16
Функции, конечно же, не обязательно должны быть одинаковыми. Пусть, например, у нас есть функция, возвращающая квадрат числа, и функция, возвращающая куб числа:
function square(num) {
return num * num;
}
function cube(num) {
return num * num * num;
}
Давайте с помощью этих функций возведем число
2
в квадрат, а затем результат этой
операции возведем в куб:
let result = cube(square(2));
alert(result);
Пусть теперь у нас есть функция, возвращающая квадрат числа, и функция, находящая сумму двух чисел:
function square(num) {
return num * num;
}
function sum(num1, num2) {
return num1 + num2;
}
Найдем с помощью этих функций сумму квадрата
числа 2
и сумму квадрата числа 3
:
let result = sum(square(2), square(3));
alert(result);
Пусть у вас есть функция, возвращающая квадратный корень из числа, и функция, округляющая дробь до трех знаков в дробной части:
function sqrt(num) {
return Math.sqrt(num);
}
function round(num) {
return num.toFixed(3);
}
С помощью этих функций найдите квадратный
корень из числа 2
и округлите его
до трех знаков в дробной части.
Пусть у вас есть функция, возвращающая квадратный корень из числа, и функция, возвращающая сумму трех чисел:
function sqrt(num) {
return Math.sqrt(num);
}
function sum(num1, num2, num3) {
return num1 + num2 + num3;
}
С помощью этих функций найдите сумму корней
чисел 2
, 3
и 4
и запишите
ее в переменную result
.
Пусть у вас есть функция, округляющая дробь до трех знаков в дробной части:
function round(num) {
return num.toFixed(3);
}
С помощью этой функции модифицируйте предыдущую
задачу так, чтобы в переменную result
записывалась дробь, округленная до 3
-х
знаков в дробной части.
Тонкое место return
После того, как выполнится инструкция return
- функция закончит свою работу и никакой
код дальше не выполнится. Смотрите пример:
function func(num) {
return num * num;
alert('!'); // этот код никогда не выполнится
}
let result = func(3);
Это не значит, что в функции должен быть
один return
. Но выполнится только
один из них. В следующем примере в зависимости
от значения параметра выполнится либо первый,
либо второй return
:
function func(num) {
if (num >= 0) {
return '+';
} else {
return '-';
}
}
alert(func( 3)); // выведет '+'
alert(func(-3)); // выведет '-'
Что выведется на экран в результате выполнения следующего кода:
function func(num) {
return num;
let result = num * num;
return result;
}
alert( func(3) );
Объясните почему.
Что выведет каждый из алертов в результате выполнения следующего кода:
function func(num) {
if (num <= 0) {
return Math.abs(num);
} else {
return num * num;
}
}
alert( func(10) );
alert( func(-5) );
Объясните почему.
Что выведет каждый из алертов в результате выполнения следующего кода:
function func(num) {
if (num <= 0) {
return Math.abs(num);
}
return num * num;
}
alert( func(10) );
alert( func(-5) );
Объясните почему.
Цикл и return
Пусть у нас есть функция, возвращающая сумму
чисел от 1
до 5
:
function func() {
let sum = 0;
for (let i = 1; i <= 5; i++) {
sum += i;
}
return sum;
}
let result = func();
alert(result); // выведет 15
Пусть теперь мы расположим return
внутри цикла, вот так:
function func() {
let sum = 0;
for (let i = 1; i <= 5; i++) {
sum += i;
return sum;
}
}
let result = func();
alert(result);
В этом случае цикл прокрутится лишь одну
итерацию и произойдет автоматический выход
из функции (ну и заодно из цикла). А за одну
итерацию цикла в переменной sum
окажется
лишь число 1
, а не вся нужная сумма.
Что выведется на экран в результате выполнения следующего кода:
function func(num) {
let sum = 0;
for (let i = 1; i <= num; i++) {
sum += i;
return sum;
}
}
alert( func(5) );
Объясните почему. Что хотел сделать автор данного кода? Исправьте ошибку автора.
Применение return в цикле
То, что return
расположен внутри цикла,
не всегда может быть ошибкой. В следующем
примере сделана функция, которая определяет,
сколько первых элементов массива нужно сложить,
чтобы сумма стала больше или равна 10
:
function func(arr) {
let sum = 0;
for (let i = 0; i < arr.length; i++) {
sum += arr[i];
// Если сумма больше или равна 10:
if (sum >= 10) {
return i + 1; // выходим из цикла и из функции
}
}
}
let result = func([1, 2, 3, 4, 5]);
alert(result);
А в следующем примере сделана функция, которая
вычисляет, сколько целых чисел, начиная с
1
, нужно сложить, чтобы результат
был больше 100
:
function func() {
let sum = 0;
let i = 1;
while (true) { // бесконечный цикл
sum += i;
if (sum >= 100) {
return i; // цикл крутится пока не выйдет тут
}
i++;
}
}
alert( func() );
Напишите функцию, которая параметром будет
принимать число и делить его на 2
столько раз, пока результат не станет меньше
10
. Пусть функция возвращает количество
итераций, которое потребовалось для достижения
результата.
Приемы работы с return
Существуют некоторые приемы работы с return
,
упрощающие код. Рассмотрим, к примеру, следующий
код:
function func(num) {
let result;
if (num >= 0) {
result = Math.sqrt(num);
} else {
result = 0;
}
return result;
}
alert(func(3));
Как вы видите, в данном коде в зависимости
от условия в переменную result
будет
попадать либо одно, либо другое значение.
А последней строкой функции содержимое переменной
result
возвращается через return
.
Давайте перепишем этот код в более сокращенной
форме, избавившись от ненужной здесь переменной
result
:
function func(num) {
if (num >= 0) {
return Math.sqrt(num);
} else {
return 0;
}
}
alert(func(3));
Дана следующая функция:
function func(num1, num2) {
let result;
if (num1 > 0 && num2 > 0) {
result = num1 * num2;
} else {
result = num1 - num2;
}
return result;
}
alert(func(3, 4));
Перепишите ее в сокращенной форме согласно изученной теории.