Разное

Function js return: return — JavaScript | MDN

Содержание

return — JavaScript | MDN

Оператор return завершает выполнение текущей функции и возвращает её значение.

The source for this interactive example is stored in a GitHub repository. If you’d like to contribute to the interactive examples project, please clone https://github.com/mdn/interactive-examples and send us a pull request.

Исходный код данного интерактивного примера хранится в репозитории на GitHub. Если вы хотите поучаствовать в проекте интерактивных примеров, пожалуйста, склонируйте https://github.com/mdn/interactive-examples и отправьте нам запрос на включение ваших изменений.

return [[выражение]]; 
выражение
Выражение, значение которого будет возвращено. Если не указано, вместо него возвращается undefined.

При вызове оператора return в функции её выполнение прекращается. Указанное значение возвращается в место вызова функции. Например, приведенная ниже функция возвращает возведенное в квадрат значение своего аргумента, x (где x – это число):

function square(x) {
   return x * x;
}
var demo = square(3);

Если возвращаемое значение не указано, вместо него возвращается undefined.

Следующие выражения всегда прерывают выполнение функции:

return;
return true;
return false;
return x;
return x + y / 3;

Автоматическая расстановка точек с запятыми

На выражение return влияет автоматическая расстановка точек с запятыми (ASI). Разрыв строки не допускается между ключевым словом return и выражением.

return
a + b;

трансформируется ASI в:

return;
a + b;

В консоли появится предупреждение «unreachable code after return statement».

Начиная с Gecko 40 (Firefox 40 / Thunderbird 40 / SeaMonkey 2.37), предупреждение в консоли появляется, если обнаружен недостижимый код после return.

Для того, чтобы избежать данной проблемы (предотвратить ASI), можно использовать скобки:

return (
  a + b;
);

Прерывание функции

Функция немедленно останавливается в точке, где вызывается return.

function counter() {
  for (var count = 1; ; count++) {  
    console.log(count + "A"); 
      if (count === 5) {
        return;
      }
      console.log(count + "B");  
    }
  console.log(count + "C");  
}

counter();











Возвращение функции

Смотрите также статью о замыканиях.

function magic(x) {
  return function calc(x) { return x * 42 };
}

var answer = magic();
answer(1337); 

BCD tables only load in the browser

Возвращаемое значение функции — Изучение веб-разработки

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

Необходимые навыки:

Базовая компьютерная грамотность, знание основ HTML и CSS, JavaScript first steps, Functions — reusable blocks of code.

Цели:Понять что такое возвращаемое значение функции и как его использовать.

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

var myText = 'I am a string';
var newString = myText.replace('string', 'sausage');
console.log(newString);


Мы уже видели этот блок кода в нашей первой статье про функции. Мы вызываем функцию replace() на строке myText и передаем ей 2 параметра —  заменяемую подстроку и подстроку, которой будем заменять. Когда функция завершит выполнение, она вернет значение, которым является новая строка со сделанными в ней заменами.  В коде выше мы сохраняем это возвращаемое значение как значение переменной newString.

Если Вы посмотрите на функцию replace() на MDN reference page, вы увидите секцию под названием Return value.  Очень важно знать и понимать какие значения возвращаются функциями, так что мы пытаемся включать эту информацию везде, где это возможно.

Некоторые функции не возвращают значения( на наших reference pages, возвращаемое значение обозначено как void или undefined в таких случаях). Например, в функции displayMessage() которую мы сделали в прошлой статье, в результате выполнения функции не возвращается никакого значения. Функция всего лишь отображает что-то где-то на экране.

В основном, возвращаемое значение используется там, где функция является чем-то вроде вспомогательного звена при вычислениях. Вы хотите получить результат, который включает в себя некоторые значения. Эти значения вычисляются функцией, которая возвращает результат так, что он может быть использован в следующих стадиях вычисления.

Использование возвращаемых значений в ваших собственных функциях

Чтобы вернуть значение своей функции, вы должны использовать ключевое слово return. Мы видели это в действии недавно — в нашем примере random-canvas-circles.html. Наша функцияdraw()отрисовывает где-то на экране 100 случайных кружков. 

<canvas>:

function draw() {
  ctx.clearRect(0,0,WIDTH,HEIGHT);
  for (var i = 0; i < 100; i++) {
    ctx.beginPath();
    ctx.fillStyle = 'rgba(255,0,0,0.5)';
    ctx.arc(random(WIDTH), random(HEIGHT), random(50), 0, 2 * Math.PI);
    ctx.fill();
  }
}

Внутри каждой итерации есть 3 вызова функции random(). Это сделано чтобы сгенерировать случайное значение для текущей координаты x, y и для радиуса. Функция random() принимает 1 параметр (целое число) и возвращает случайное число в диапазоне от 0 до этого числа. Выглядит это вот так: 

function random(number) {
  return Math.floor(Math.random()*number);
}

Тоже самое может быть написано вот так:

function random(number) {
  var result = Math.floor(Math.random()*number);
  return result;
}

Но первую версию написать быстрее и она более компактна.

Мы возвращаем результат вычисления Math.floor(Math.random()*number) каждый раз когда функция вызывается. Это возвращаемое значение появляется в момент вызова функции и код продолжается. Так, например, если мы выполним следующую строчку:

ctx.arc(random(WIDTH), random(HEIGHT), random(50), 0, 2 * Math.PI);

и 3 вызова random() вернут значения 500, 200 и 35, соответственно, строчка будет выполнена как если бы она была такой:

ctx.arc(500, 200, 35, 0, 2 * Math.PI);

Сначала выполняются вызовы функции random(), на место которых подставляются возвращаемые ей значения, а затем выполнятся сама строка.

Теперь напишем нашу собственную возвращающую значение функцию.

  1. Первым делом, сделайте локальную копию файла function-library.html из GitHub. Это простая HTML страничка, содержащая текстовое поле <input> и параграф Также там есть элемент <script> в котором мы храним в 2ух переменных ссылки на оба HTML элемента. Это маленькая страничка позволит Вам ввести число в text box и отобразит различные, относящиеся к нему числа в параграфе ниже.
  2. Теперь добавим несколько полезных функций в элемент <script> . Ниже двух существующих строчек JavaScript, добавьте следующие описания функций:
    function squared(num) {
      return num * num;
    }
    
    function cubed(num) {
      return num * num * num;
    }
    
    function factorial(num) {
      var x = num;
      while (x > 1) {
        num *= x-1;
        x--;
      }
      return num;
    }

    Ффункции squared() и cubed() довольно очевидны— они возвращают квадрат или куб переданного как параметр числа. Функция factorial() возвращает factorial переданного числа.

  3. Далее мы добавим способ выводить нашу информацию введенным в  text input числе. Добавьте обработчик событий ниже существующих функций:
    input.onchange = function() {
      var num = input.value;
      if (isNaN(num)) {
        para.textContent = 'You need to enter a number!';
      } else {
        para.textContent = num + ' squared is ' + squared(num) + '. ' +
                           num + ' cubed is ' + cubed(num) + '. ' +
                           num + ' factorial is ' + factorial(num) + '.';
      }
    }

    Здесь мы создаем обработчик событий onchange  который срабатывает когда меняется когда новое значение вводится в text input и подтверждается (введите значение и, например, нажмите tab). Когда анонимная функция срабатывает, введенное в input значение сохраняется в переменной num .

  4. Далее мы делаем условный тест — если введенное значение не является числом, мы выводим в параграф сообщение об ошибке . Тест смотрит возвращает ли выражение isNaN(num)  true. Мы используем функцию isNaN() чтобы проверить что значение переменной num не число — если так то функция возвращаетtrue, если нет- false.

  5. Если тест возвращает false, значение переменной numчисло, и поэтому мы выводим сообщение внутри параграфа о значениях квадрата, куба и факториала числа. Предложение вызывает  функции squared(), cubed() иfactorial() чтобы получить нужные значения. Сохраните Ваш код, загрузите его в браузере и посмотрите на то что получилось.

К этому моменту мы хотели бы чтобы вы написали парочку собственных функций и добавили их в библиотеку. Как на счет квадратного или кубического корня числа или длины окружности круга с длиной радиуса равной числу num?

Это упражнение привнесло парочку важных понятий в изучении того, как использовать ключевое слово return . В дополнение:

  • Приведите другой пример написание обработчика ошибок. Это довольно хорошая идея проверять что важные параметры предоставлены в правильном типе и если они опциональны то предусматривать для них значения по умолчанию. В таком случая Ваша программа с меньшей вероятность подвержена ошибкам. 
  • Поразмышляйте о идее создания библиотеки функций. Чем дальше Вы будите расти в профессиональном плане, тем больше будете сталкиваться с однотипными вещами. Это хорошая идея начать собирать свою собственную библиотеку функций, которые Вы часто используют — в таком случае Вы сможете просто скопировать их в Ваш новый код или просто добавить их в любую HTML страничку, где это требуется.

Функции очень полезны и не смотря на то, что об их синтаксисе и функциональности можно говорить долго, у нас есть довольно понятные статьи для дальнейшего обучения.

Если в статье есть что-то что вы не поняли, не стесняйтесь перечитать статью еще раз или свяжитесь с нами для получения помощи.

  • Функции более подробно — подробное руководство, охватывающее более продвинутую информацию, связанную с функциями.
  • Функции обратного вызова в JavaScript — распространенный паттерн JavaScript для передачи функции в другую функцию как аргумент, который затем вызывается внутри первой функции.

Условный рендеринг – React

React позволяет разделить логику на независимые компоненты. Эти компоненты можно показывать или прятать в зависимости от текущего состояния.

Условный рендеринг в React работает так же, как условные выражения работают в JavaScript. Бывает нужно объяснить React, как состояние влияет на то, какие компоненты требуется скрыть, а какие — отрендерить, и как именно. В таких ситуациях используйте условный оператор JavaScript или выражения подобные if.

Рассмотрим два компонента:

function UserGreeting(props) {
  return <h2>С возвращением!</h2>;
}

function GuestGreeting(props) {
  return <h2>Войдите, пожалуйста.</h2>;
}

Можно создать компонент Greeting, который отражает один из этих компонентов в зависимости от того, выполнен ли вход на сайт:

function Greeting(props) {
  const isLoggedIn = props.isLoggedIn;
  if (isLoggedIn) {    return <UserGreeting />;  }  return <GuestGreeting />;}
ReactDOM.render(
  
  <Greeting isLoggedIn={false} />,  document.getElementById('root'));

Посмотреть на CodePen

В этом примере рендерится различное приветствие в зависимости от значения пропа isLoggedIn.

Переменные-элементы

Элементы React можно сохранять в переменных. Это может быть удобно, когда какое-то условие определяет, надо ли рендерить одну часть компонента или нет, а другая часть компонента остаётся неизменной.

Рассмотрим ещё два компонента, представляющих кнопки Войти (Login) и Выйти (Logout).

function LoginButton(props) {
  return (
    <button onClick={props.onClick}>
      Войти
    </button>
  );
}

function LogoutButton(props) {
  return (
    <button onClick={props.onClick}>
      Выйти
    </button>
  );
}

В следующем примере мы создадим компонент с состоянием и назовём его LoginControl.

Он будет рендерить либо <LoginButton />, либо <LogoutButton /> в зависимости от текущего состояния. А ещё он будет всегда рендерить <Greeting /> из предыдущего примера.

class LoginControl extends React.Component {
  constructor(props) {
    super(props);
    this.handleLoginClick = this.handleLoginClick.bind(this);
    this.handleLogoutClick = this.handleLogoutClick.bind(this);
    this.state = {isLoggedIn: false};
  }

  handleLoginClick() {
    this.setState({isLoggedIn: true});
  }

  handleLogoutClick() {
    this.setState({isLoggedIn: false});
  }

  render() {
    const isLoggedIn = this.state.isLoggedIn;
    let button;
    if (isLoggedIn) {      button = <LogoutButton onClick={this.handleLogoutClick} />;    } else {      button = <LoginButton onClick={this.handleLoginClick} />;    }
    return (
      <div>
        <Greeting isLoggedIn={isLoggedIn} />        {button}      </div>
    );
  }
}

ReactDOM.render(
  <LoginControl />,
  document.getElementById('root')
);

Посмотреть на CodePen

Нет ничего плохого в том, чтобы объявить переменную и условно рендерить компонент if-выражением. Но иногда хочется синтаксис покороче. Давайте посмотрим на несколько других способов писать условия прямо в JSX.

Встроенные условия if с логическим оператором &&

Вы можете внедрить любое выражение в JSX, заключив его в фигурные скобки. Это правило распространяется и на логический оператор && языка JavaScript, которым можно удобно вставить элемент в зависимости от условия:

function Mailbox(props) {
  const unreadMessages = props.unreadMessages;
  return (
    <div>
      <h2>Здравствуйте!</h2>
      {unreadMessages.length > 0 &&        <h3>          У вас {unreadMessages.length} непрочитанных сообщений.        </h3>      }    </div>
  );
}

const messages = ['React', 'Re: React', 'Re:Re: React'];
ReactDOM.render(
  <Mailbox unreadMessages={messages} />,
  document.getElementById('root')
);

Посмотреть на CodePen

Приведённый выше вариант работает корректно, потому что в JavaScript выражение true && expression всегда вычисляется как expression, а выражение false && expression — как false.

То есть, если условие истинно (true), то элемент, идущий непосредственно за &&, будет передан на вывод. Если же оно ложно (false), то React проигнорирует и пропустит его.

Обратите внимание, что ложное выражение, как ожидается, пропустит элемент после &&, но при этом выведет результат этого выражения. В примере ниже метод render вернёт <div>0</div>.

render() {
  const count = 0;  return (
    <div>
      { count && <h2>Количество сообщений: {count}</h2>}    </div>
  );
}

Встроенные условия if-else с тернарным оператором

Есть ещё один способ писать условия прямо в JSX. Вы можете воспользоваться тернарным оператором condition ? true : false.

Вот как этот метод можно использовать, чтобы отрендерить кусочек текста.

render() {
  const isLoggedIn = this.state.isLoggedIn;
  return (
    <div>
      Пользователь <b>{isLoggedIn ? 'сейчас' : 'не'}</b> на сайте.    </div>
  );
}

Этот метод можно использовать и с выражениями покрупнее, но это может сделать код менее очевидным:

render() {
  const isLoggedIn = this.state.isLoggedIn;
  return (
    <div>
      {isLoggedIn        ? <LogoutButton onClick={this.handleLogoutClick} />
        : <LoginButton onClick={this.handleLoginClick} />      }
    </div>  );
}

Как в JavaScript, так и в React выбор синтаксиса зависит от ваших предпочтений и принятого в команде стиля. Не забывайте, что если какое-то условие выглядит очень сложным, возможно пришло время извлечь часть кода в отдельный компонент.

Предотвращение рендеринга компонента

В редких случаях может потребоваться позволить компоненту спрятать себя, хотя он уже и отрендерен другим компонентом. Чтобы этого добиться, верните null вместо того, что обычно возвращается на рендеринг.

Например, будет ли содержимое <WarningBanner /> отрендерено, зависит от значения пропа под именем warn. Если значение false, компонент ничего не рендерит:

function WarningBanner(props) {
  if (!props.warn) {    return null;  }
  return (
    <div className="warning">
      Предупреждение!
    </div>
  );
}

class Page extends React.Component {
  constructor(props) {
    super(props);
    this.state = {showWarning: true};
    this.handleToggleClick = this.handleToggleClick.bind(this);
  }

  handleToggleClick() {
    this.setState(state => ({
      showWarning: !state.showWarning
    }));
  }

  render() {
    return (
      <div>
        <WarningBanner warn={this.state.showWarning} />        <button onClick={this.handleToggleClick}>
          {this.state.showWarning ? 'Спрятать' : 'Показать'}
        </button>
      </div>
    );
  }
}

ReactDOM.render(
  <Page />,
  document.getElementById('root')
);

Посмотреть на CodePen

Сам факт возврата null из метода render компонента никак не влияет на срабатывание методов жизненного цикла компонента. Например, componentDidUpdate будет всё равно вызван.

возврат — JavaScript | MDN

Оператор return завершает выполнение функции и
указывает значение, возвращаемое вызывающей функции.

Исходный код этого интерактивного примера хранится в репозитории GitHub. Если вы хотите внести свой вклад в проект интерактивных примеров, клонируйте https://github.com/mdn/interactive-examples и отправьте нам запрос на перенос.

  return [выражение];  
выражение
Выражение, значение которого должно быть возвращено.Если опущено, undefined равно
вместо этого вернулся.

Когда в теле функции используется оператор return , выполнение
функция остановлена. Если указано, вызывающей функции возвращается заданное значение. За
Например, следующая функция возвращает квадрат своего аргумента x ,
где x — число.

  функция square (x) {
   вернуть х * х;
}
var demo = square (3);

  

Если значение не указано, вместо него возвращается undefined .

Все следующие операторы возврата прерывают выполнение функции:

  возврат;
вернуть истину;
вернуть ложь;
вернуть x;
вернуть x + y / 3;
  

Автоматическая вставка точки с запятой

На оператор возврата влияет автоматический
вставка точки с запятой (ASI). Между
возвращает ключевое слово и выражение.

  возврат
а + б;
  

преобразован ASI в:

  возврат;
а + б;
  

Консоль выдаст предупреждение о недоступности кода после оператора возврата.

Начиная с Firefox 40, в консоли отображается предупреждение, если
недостижимый код обнаружен после оператора return .

Чтобы избежать этой проблемы (чтобы предотвратить ASI), вы можете использовать круглые скобки:

  возврат (
  а + б
);
  

Прерывание функции

Функция немедленно останавливается в точке вызова return .

  function counter () {
  for (var count = 1;; count ++) {
    console.log (счетчик + 'A');
      if (count === 5) {
        возвращаться;
      }
      консоль.журнал (счетчик + 'B');
    }
  console.log (счетчик + 'C');
}

прилавок();











  

Возвращение функции

См. Также статью о замыканиях.

  function magic () {
  функция возврата calc (x) {return x * 42; };
}

var answer = magic ();
ответ (1337);
  

Таблицы BCD загружаются только в браузере

Возвращаемые значения функции — Изучение веб-разработки

Нам нужно обсудить еще одно важное понятие о функциях — возвращаемые значения.Некоторые функции не возвращают значимого значения, но другие возвращают. Важно понимать, каковы их значения, как использовать их в коде и как заставить функции возвращать полезные значения. Мы рассмотрим все это ниже.

Возвращаемые значения — это то, на что они похожи — значения, которые функция возвращает по завершении. Вы уже несколько раз встречали возвращаемые значения, хотя, возможно, не задумывались о них явно.

Вернемся к знакомому примеру (из предыдущей статьи этой серии):

  let myText = 'Погода холодная';
пусть newString = myText.replace ('холодный', 'теплый');
console.log (newString);


  

Функция replace () вызывается для строки myText , и ей передаются два параметра:

  1. подстрока для поиска (‘холодная’).
  2. строку, которую нужно заменить на («теплая»).

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

Если вы посмотрите на справочную страницу MDN функции replace () , вы увидите раздел под названием «возвращаемое значение». Очень полезно знать и понимать, какие значения возвращают функции, поэтому мы стараемся включать эту информацию везде, где это возможно.

Некоторые функции не возвращают никаких значений. (В этих случаях наши справочные страницы перечисляют возвращаемое значение как void или undefined .) Например, в функции displayMessage () , которую мы создали в предыдущей статье, при вызове функции не возвращается конкретное значение. .Он просто заставляет поле появляться где-нибудь на экране — вот и все!

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

Использование возвращаемых значений в ваших собственных функциях

Чтобы вернуть значение из пользовательской функции, вам необходимо использовать ключевое слово return.Недавно мы видели это в действии в нашем примере random-canvas-circle.html. Наша функция draw () рисует 100 случайных кругов где-нибудь на HTML :

  function draw () {
  ctx.clearRect (0, 0, ШИРИНА, ВЫСОТА);
  for (let i = 0; i <100; i ++) {
    ctx.beginPath ();
    ctx.fillStyle = 'rgba (255,0,0,0.5)';
    ctx.arc (случайный (ШИРИНА), случайный (ВЫСОТА), случайный (50), 0, 2 * Math.PI);
    ctx.fill ();
  }
}  

Внутри каждой итерации цикла выполняются три вызова функции random () , чтобы сгенерировать случайное значение для координаты x текущего круга, координаты y и радиуса соответственно.Функция random () принимает один параметр - целое число - и возвращает целое случайное число от 0 до этого числа. Выглядит это так:

  функция случайный (число) {
  вернуть Math.floor (Math.random () * число);
}  

Это можно было бы записать так:

  функция случайный (число) {
  const result = Math.floor (Math.random () * число);
  вернуть результат;
}  

Но первая версия пишется быстрее и компактнее.

Мы возвращаем результат вычисления Math.floor (Math.random () * number) каждый раз при вызове функции. Это возвращаемое значение появляется в том месте, где была вызвана функция, и код продолжается.

Итак, когда вы выполните следующее:

  ctx.arc (случайный (WIDTH), случайный (HEIGHT), случайный (50), 0, 2 * Math.PI);  

Если три вызова random () вернули значения 500 , 200 и 35 , соответственно, строка фактически запустилась бы так, как если бы она была такой:

  CTX.arc (500, 200, 35, 0, 2 * Math.PI);  

Сначала выполняются вызовы функций в строке, а их возвращаемые значения подставляются вместо вызовов функций, а затем выполняется сама строка.

Давайте приступим к написанию наших собственных функций с возвращаемыми значениями.

  1. Прежде всего, сделайте локальную копию файла function-library.html с GitHub. Это простая HTML-страница, содержащая текстовое поле и абзац. Также есть элемент