Пусть у нас есть функция, которая выводит на экран квадрат переданного числа:
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 - функция закончит свою работу. То есть: после выполнения 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 расположен после цикла.
Пусть теперь мы расположим 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));
Перепишите ее в сокращенной форме согласно изученной теории.