Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Директива return (https://javascript.ru/forum/misc/77498-direktiva-return.html)

Рамиль 13.05.2019 22:14

Директива return
 
Здравствуйте!

Пожалуйста, помогите понять разницу между этими двумя кодами:

function sum (a, b) {
		return (a + b);
	}
	alert ( sum (5, 6));



function sum (a, b) {
		alert (a + b);
	}
	sum (5, 6);



Цитата из учебника:

"Как только до неё (директивы return) доходит управление – функция завершается и значение передается обратно."

Я не могу понять, что значит значение передаётся обратно, куда обратно передаётся. :( Ведь по функциональности оба кода одинаковые.

Malleys 13.05.2019 22:55

Первый вариант показывает чистую функцию, т. е. её результат вычисляется на основе её аргументов. Второй вариант показывает функцию с побочным эффектом: берётся сумма аргументов и выводится в диалоговое окно, в этом случае невозможно построить однозначную таблицу значений функции, поскольку она всегда возвращает undefined.

Побочный эффект, например, выражается в том, что вторая функция sum меняет внешний мир. (Показалось окошко)

Функция alert сама по себе имеет побочный эффект: она что-то выводит на экран.

Лучше использовать чистые функции (первый пример). Когда функция не имеет побочных эффектов, она называется чистой функцией. Чистые функции:
  • проще читать
  • проще отлаживать
  • проще тестировать
  • не зависят от порядка, в котором они вызываются
  • просто запустить параллельно (одновременно)

Статьи:

Dilettante_Pro 14.05.2019 13:02

Цитата:

Сообщение от Рамиль
Я не могу понять, что значит значение передаётся обратно, куда обратно передаётся.

Чтобы было понятнее, немного переделал ваши примеры:

function sum (a, b) {
		return (a + b);
	}
var res = sum (5, 6);
alert ( res);


function sum (a, b) {
		alert (a + b);
	}
var res = sum (5, 6);
alert ( res);

В первом варианте вычисленный внутри суммы результат возвращается в место вызова функции - строка 4 - и присваивается переменной res

Во втором случае функция не возвращает вычисленный результат.

Рамиль 14.05.2019 18:24

Спасибо. Стало понятнее. :)


Часовой пояс GMT +3, время: 21:44.