Mir-knigi.online
Книги онлайн читать бесплатно!
  • Главная
  • Жанры
  • ТОП книг
  • ТОП авторов
  • Контакты

JavaScript. Подробное руководство, 6-е издание

Часть 93 из 535 Информация о книге

<b>      if (element == null) continue; // Пропустить null и undefined</b>

<b>      if (isFinite(element))</b>

<b>        total += element;</b>

<b>      else throw new Error(&quot;sum(): все элементы должны быть числами&quot;);</b>

<b>    }</b>

<b>    return total;</b>

<b>  }</b>

<b>  else throw new Error(&quot;sum(): аргумент должен быть массивом&quot;);</b>

<b>}</b>

Этот метод

<b>sum()</b>
весьма строго относится к проверке типов входных аргументов и генерирует исключения с достаточно информативными сообщениями, если типы входных аргументов не соответствуют ожидаемым. Тем не менее он остается достаточно гибким, обслуживая наряду с настоящими массивами объекты, подобные массивам, и игнорируя элементы, имеющие значения
<b>null</b>
и
<b>undefined</b>
.

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

<b>flexsum(),</b>
реализующий такой подход (и, вероятно, являющийся примером другой крайности). Например, он принимает любое число входных аргументов и рекурсивно обрабатывает те из них, которые являются массивами. Вследствие этого он может принимать переменное число аргументов или массив аргументов. Кроме того, он прилагает максимум усилий, чтобы преобразовать нечисловые аргументы в числа, прежде чем сгенерировать исключение:

<b>function flexisum(a) { var total = 0;</b>

<b>  for(var і = 0; і &lt; arguments.length; i++) {</b>

<b>    var element = arguments[i], n;</b>

<b>    if (element == null) continue; // Игнорировать null и undefined</b>

<b>    if (isArray(element)) // Если аргумент - массив</b>

<b>      n = flexisum.apply(this. element); // вычислить сумму рекурсивно</b>

<b>    else</b>

<b>      if (typeof element === &quot;function&quot;) // Иначе, если это функция...</b>

<b>        n = Number(element()); // вызвать и преобразовать,</b>

<b>      else</b>

<b>        n = Number(element); // Иначе попробовать преобразовать</b>

<b>    if (isNaN(n)) // Если не удалось преобразовать в число, возбудить искл.</b>

<b>      throw Error(&quot;flexisum(): невозможно преобразовать &quot; + element + в число&quot;);</b>

<b>    total += n; // Иначе прибавить n к total</b>

<b>  }</b>

<b>  return total;</b>

<b>}</b>

8.4. Функции как данные

Самые важные особенности функций заключаются в том, что они могут определяться и вызываться. Определение и вызов функции - это синтаксические средства JavaScript и большинства других языков программирования. Однако в JavaScript функции - это не только синтаксические конструкции, но и данные, а это означает, что они могут присваиваться переменным, храниться в свойствах объектов или элементах массивов, передаваться как аргументы функциями и т. д. [13]

Чтобы понять, как функции в JavaScript могут быть одновременно синтаксическими конструкциями и данными, рассмотрим следующее определение функции:

<b>function square(x) { return х*х; }</b>

Это определение создает новый объект функции и присваивает его переменной square. Имя функции действительно нематериально - это просто имя переменной, которая ссылается на объект функции. Функция может быть присвоена другой переменной, и при этом работать так же, как и раньше:

<b>var s = square; // Теперь s ссылается на ту же функцию, что и square </b>

<b>square(4); // =&gt; 16</b>

<b>s(4); // =&gt; 16</b>

Функции могут быть также присвоены не только глобальным переменным, но и свойствам объектов. В этом случае их называют методами:

<b>var о = {square: function(x) { return х*х; }}; // Литерал объекта </b>

<b>var у = о.square(16); // у = 256</b>

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

<b>var а = [function(x) { return х*х; }, 20]; // Литерал объекта</b>

<b>а[0](а[1]); // =&gt; 400</b>

Синтаксис вызова функции в последнем примере выглядит необычно, однако это вполне допустимый вариант применения выражения вызова!

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

Пример 8.2. Использование функций как данных

<b>// Определения нескольких простых функций </b>

<b>function add(x.y) { return х + у; } </b>

<b>function subtract(x,у) { return х - у; } </b>

<b>function multiply(x,у) { return х * у; } </b>

<b>function divide(x,y) { return x / у; }</b>

<b>// Эта функция принимает одну из предыдущих функций </b>

<b>// в качестве аргумента и вызывает ее с двумя операндами </b>

<b>function operate(operator, operand1, operand2) {</b>

<b>  return operator(operand1, operand2);</b>


Перейти к странице:
Предыдущая страница
Следующая страница
Жанры
  • Военное дело
  • Деловая литература
  • Детективы и триллеры
  • Детские
  • Детские книги
  • Документальная литература
  • Дом и дача
  • Дом и Семья
  • Жанр не определен
  • Зарубежная литература
  • Знания и навыки
  • История
  • Компьютеры и Интернет
  • Легкое чтение
  • Любовные романы
  • Научно-образовательная
  • Образование
  • Поэзия и драматургия
  • Приключения
  • Проза
  • Прочее
  • Психология и мотивация
  • Публицистика и периодические издания
  • Религия и духовность
  • Родителям
  • Серьезное чтение
  • Спорт, здоровье и красота
  • Справочная литература
  • Старинная литература
  • Техника
  • Фантастика и фентези
  • Фольклор
  • Хобби и досуг
  • Юмор
Mir-knigi.online

Бесплатная онлайн библиотека для чтения книг без регистрации с телефона или компьютера. У нас собраны последние новинки, мировые бестселлеры книжного мира.

Контакты
  • [email protected]
Информация
  • Карта сайта
© mir-knigi.online, 2026. | Вход