return
Функция возвращает результат, который будет передан в вызвавший её код. Для этого и используется ключевое слово return .
Пример
Скопировать ссылку «Пример» Скопировано
Примеры использования return. Функция проверки возраста на совершеннолетие и функция создания строки заданной длины со случайным содержимым — просто введите произвольные числа 😎
Как пишется
Скопировать ссылку «Как пишется» Скопировано
return используется только в функциях. Этот код приведёт к ошибке, так как не является функцией:
const result = 42if (result > 10) return true>return false
const result = 42 if (result > 10) return true > return false
function isAdult(age) return age > 18>
function isAdult(age) return age > 18 >
Как понять
Скопировать ссылку «Как понять» Скопировано
Определённый код «сгруппирован» и объединён в функцию, например проверка — чётное число или нет:
function isEven(value) if (undefined === value || null === value) return false > return value % 2 == 0>
function isEven(value) if (undefined === value || null === value) return false > return value % 2 == 0 >
Пример
Скопировать ссылку «Пример» Скопировано
Для возврата значения используется инструкция return
Она может находиться в любом месте функции. Как только до неё доходит управление — функция завершается и значение передаётся обратно.
Писать return в функции необязательно. Рассмотрим пример:
function notify(msg, type) if (type === 'error') alert('ОШИБКА:' + msg) > alert(msg)>
function notify(msg, type) if (type === 'error') alert('ОШИБКА:' + msg) > alert(msg) >
Такой функции нечего возвращать, она служит только для группировки набора команд.
Несмотря на отсутствие return , такая функция будет возвращать undefined , будто бы в ней последней строчкой написано return undefined
Ниже пример, который показывает что это действительно так:
function notify(msg, type) if (type === 'error') alert('ОШИБКА:' + msg) > alert(msg)>function notifyFull(msg, type) if (type === 'error') alert('ОШИБКА:' + msg) > alert(msg) return undefined>const a = notify('Сообщение')const b = notifyFull('Сообщение')console.log(a === b)// true
function notify(msg, type) if (type === 'error') alert('ОШИБКА:' + msg) > alert(msg) > function notifyFull(msg, type) if (type === 'error') alert('ОШИБКА:' + msg) > alert(msg) return undefined > const a = notify('Сообщение') const b = notifyFull('Сообщение') console.log(a === b) // true
На практике
Скопировать ссылку «На практике» Скопировано
Дока Дог советует
Скопировать ссылку «Дока Дог советует» Скопировано
🛠 Благодаря return можно использовать результат работы функции где угодно. Например, в условиях или при формировании новых значений. Пример ниже использует функцию с return для проверки условия — действительно ли счёт игрока больше 100:
function checkScore(score) return score > 100>const s1 = 10const s2 = 15const s3 = 20if (checkScore(s1)) alert('игрок 1 проходит')if (checkScore(s2)) alert('игрок 2 проходит')if (checkScore(s3)) alert('игрок 3 проходит')
function checkScore(score) return score > 100 > const s1 = 10 const s2 = 15 const s3 = 20 if (checkScore(s1)) alert('игрок 1 проходит') if (checkScore(s2)) alert('игрок 2 проходит') if (checkScore(s3)) alert('игрок 3 проходит')
const s1 = 10const s2 = 15const s3 = 20if (s1 > 100) alert('игрок 1 проходит')if (s2 > 100) alert('игрок 2 проходит')if (s3 > 100) alert('игрок 3 проходит')
const s1 = 10 const s2 = 15 const s3 = 20 if (s1 > 100) alert('игрок 1 проходит') if (s2 > 100) alert('игрок 2 проходит') if (s3 > 100) alert('игрок 3 проходит')
Почему эффективнее?
- если условие проверки очков изменится — его придётся писать в нескольких местах.
- если условие будет состоять более чем из одной проверки, то if усложнится и его будет сложнее понимать. Функцию, дающую ответ true или false легче читать в условном операторе.
Необходимо помнить, если выполнение функции завершилось не через return , то возвращаемое значение будет undefined ;
Самый простой способ этого избежать — всегда добавлять return с каким-либо значением перед концом функции.
- Ещё return останавливает выполнение функции. Обычно это ожидаемое поведение, но если про это забыть — возможны баги.
Функции в JavaScript
При написании кода, часто появляется необходимость использовать один и тот же функционал во многих местах программы, для удобного решения этой задачи используют функции.
Функция — это блок кода, который решает определенную задачу или возвращает значение и может выполняться многократно в разных местах и с разными входными данными. В JavaScript уже есть встроенные функции, такие как Math.random() , prompt(message, default) , Date() и многие другие. Здесь мы поговорим о тех, которые можно создавать самостоятельно.
Синтаксис
Работу с функциями можно разделить на два этапа: создание (объявление) и выполнение (вызов).
Объявление функции
function — ключевое слово, обозначающее функцию.
showIntention() — имя функции, а в круглых скобках её параметры.
< >— в фигурных скобках — тело функции.
Вызов
Для того, чтобы функция отработала мы должны ее вызвать.
Без вызова функции мы не увидим сообщение, а для того, чтобы выполнить действие несколько раз вызов надо всего лишь продублировать. В итоге мы получаем такую программу.
function showIntention() < alert( 'Я хочу стать программистом!' ); >showIntention(); showIntention();
- Из названия функции должно быть предельно понятно, что там происходит.
- Для нейминга функций обозначающих действие чаще всего используют глагольные префиксы + уточнение. К первым относят: show, get, calc, create, check.
- Название может быть написано, как в стиле lowerCamelCase, так и в стиле snake_case. Первый вариант более предпочтителен и рекомендуется к применению в JavaScript. Какой вариант вы бы не выбрали, важно помнить, что название функции чувствительно к регистру.
- Не используйте для нейминга кириллицу или транслит. Несмотря на то, что в первом случае все будет работать, а во втором вроде все понятно, подобная практика считается дурным тоном.
- Используйте для названия функций английские слова.
- Имя функции не должно начинаться с цифры.
Далее разберем особенности и нюансы, которые необходимо знать при работе с функциями в JavaScript
Параметры и аргументы
Параметры функции в JavaScript записываются в круглых скобках и передаются в качестве аргументов в тело программы, как локальные переменные.
function showStudentIntention(studentName, profession) < alert(studentName + " хочет освоить профессию " + profession); >showStudentIntention("Лера", "React-разработчик"); showStudentIntention("Константин", "Web-разработчик");
При вызове showStudentIntention в локальные переменные name и profession копируются значения имени и профессии в первом случае это «Лера» и «React-разработчик». Далее они используются в теле функции — в итоге мы получаем “Лера хочет освоить профессию React-разработчик”.
Функция не меняет внешние переменные, а получает копии, с которыми и работает.
let studentName = "Лера"; let profession = "React-разработчик" function showStudentIntention(studentName, profession) < studentName = "Константин"; profession = "Web-разработчик"; alert(studentName + " хочет освоить профессию " + profession); >showStudentIntention(studentName, profession); alert(studentName + " хочет освоить профессию " + profession);
В этой программе первое модальное окно, которое вызывается showStudentIntention будет содержать информацию о Константине — внутри функции мы объявили переменные studentName и profession — внешние проигнорированы. Второй alert будет про Леру, так как здесь значения берутся уже из внешних переменных, которые еще называются глобальными. Такие переменные располагаются снаружи всех функций — в рабочих проектах их использование стараются сводить к минимуму.
Локальные переменные
Область видимости переменных объявленных внутри функции ограничиваются этой функцией.
function showStudentIntention() < let studentName = "Константин"; let profession = "Web-разработчик"; alert(studentName + " хочет освоить профессию " + profession); >showStudentIntention() alert(studentName + " считает профессию " + profession + " бесперспективной");
В данном примере отработает только вызов функции, второй alert не сработает, а в консоли можно будет увидеть ошибку — Uncaught ReferenceError: studentName is not defined.
Параметры по умолчанию
Если при вызове функции параметр не указывается, тогда он принимает значение undefined . Это не будет ошибкой — функция отработает. Однако во многих случаях будет полезней задать параметр по умолчанию.
function showStudentIntention(studentName, profession = "программист") < alert(studentName + " хочет освоить профессию " + profession); >showStudentIntention("Лера"); //Лера хочет освоить профессию программист
Здесь это — profession = «программист»
Также параметры по умолчанию могут использовать значения предыдущих параметров, которые расположены левее.
function calcScores(studentName, scoresFirstExam, scoresSecondExam, examResults = scoresFirstExam + scoresSecondExam) < alert(studentName + " набрала за экзамены " + examResults + " баллов"); >calcScores("Лера", 50, 80);
Если говорить о максимальном количестве аргументов, которые может принять функция — это 255.
Возврат значения — return
В качестве результата функция может передавать определенное значение, для этого используют директиву return .
function calcScores(scoresFirstExam, scoresSecondExam, scoresThirdExam) < let examResults = "Результат за три экзамена " + (scoresFirstExam + scoresSecondExam + scoresThirdExam); return examResults; >alert(calcScores(50, 50, 80));
По умолчанию функция возвращает undefined , в том числе и при пустом return . Сама директива может встречаться в теле функции несколько раз. Как выполнение кода доходит до первого return программа останавливается и возвращается соответствующее значение.
function calcScores(scoresFirstExam, scoresSecondExam, scoresThirdExam) < let examResults = scoresFirstExam + scoresSecondExam + scoresThirdExam; if (examResults >= 185) < return "Вы поступили!"; >else < return "Вы не поступили!"; >> alert(calcScores(50, 50, 100)); // Вы поступили! alert(calcScores(50, 50, 50)); // Вы не поступили!
Пустой return используется и для того, чтобы просто прекратить выполнение функции.
При длинной записи может появиться соблазн добавить перевод строки между return и его значением. Однако делать этого нельзя, если только не заключить значение в круглые скобки.
return a + b + c; // верно return ( a + b + c // верно ) return // интерпретатор автоматически поставит ; после return a + b + c // функция не вернет значение
Итого
Функции являются одними из важнейших строительных блоков программы на JavaScript. Они бывают встроенными, когда функционал уже заложен в языке и самописными. Самописные функции в свою очередь могут быть записаны с помощью разного синтаксиса: Function Declaration, Function Expression и «стрелочные функции». В данном уроке мы рассмотрели только первый способ.
Основные моменты работы с функциями записанными в стиле Function Declaration:
- для создания функции её необходимо объявить с помощью специальной команды function ;
- функция может иметь в своем арсенале до 255 параметров, которые записываются в круглых скобках — function name(param1, param2, param3) ;
- для вызова функции нужно прописать её название, круглые скобки и там же параметры, если они есть — functionName(param1, param2) ;
- функция имеет доступ к внешним переменным, но внешнее окружение не имеет доступа к переменным объявленным внутри функции;
- с помощью директивы return функция может возвращать необходимое значение, по умолчанию это undefined .
Skypro — научим с нуля