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

Обратите внимание, что инструкция

<b>var</b>
может также являться частью циклов
<b>for</b>
и
<b>for/in</b>
. (Объявления этих переменных так же поднимаются в начало сценария или функции, как и объявления других переменных вне цикла.) Ниже повторно приводятся примеры из раздела 3.9:

<b>for(var і = 0; і &lt; 10; i++) console.log(i);</b>

<b>for(var і = 0, j=10; і &lt; 10; i++,j--) console.log(і *j);</b>

<b>for(var і in o) console.log(i);</b>

Отметьте также, что допускается несколько раз объявлять одну и ту же переменную.

5.3.2. Инструкция function

Ключевое слово

<b>function</b>
в языке JavaScript используется для определения функций. В разделе 4.3 мы уже встречались с выражением определения функции. Но функции можно также определять в форме инструкций. Взгляните на следующие две функции:

<b>var f = function(x) { return x+1; } // Выражение присваивается переменной </b>

<b>function f(x) { return x+1; } // Инструкция включает имя переменной</b>

Объявление функции в форме инструкции имеет следующий синтаксис:

<b>function <i>имя_функции</i>([арг1 [,арг2 [..., аргn]]]) { </b>

<b>  <i>инструкции</i></b>

<b>}</b>

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

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

<b>while</b>
и в других конструкциях, тело функции требует наличия фигурных скобок, даже если оно состоит только из одной инструкции.

Ниже приводится несколько примеров определений функций:

<b>function hypotenuse(x, у) {</b>

<b>  return Math.sqrt(x*x + y*y); // Инструкция return описывается далее</b>

<b>}</b>

<b>function factorial(n) { // Рекурсивная функция</b>

<b>  if (n &lt;= 1) return 1;</b>

<b>  return n * factorial(n - 1);</b>

<b>}</b>

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

<b>if</b>
, циклов
<b>while</b>
или любых других конструкций. Из-за такого ограничения, накладываемого на объявления функций, спецификация ECMAScript не относит объявления функций к истинным инструкциям. Некоторые реализации JavaScript позволяют вставлять объявления функций в любые инструкции, но разные реализации по-разному обрабатывают эти случаи, поэтому включение объявлений функций в другие инструкции снижает переносимость программ.

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

<b>var</b>
, объявления функций, созданные с помощью инструкции
<b>function</b>
, неявно «поднимаются» в начало содержащего их сценария или функции, поэтому они видимы из любого места в сценарии или функции. Однако при использовании инструкции
<b>var</b>
поднимается только объявление переменной, а инициализация остается там, куда ее поместил программист. В случае же с инструкцией
<b>function</b>
поднимается не только имя функции, но и ее тело: все функции в сценарии или все функции, вложенные в функцию, будут объявлены до того, как начнется выполнение программного кода. Это означает, что функцию можно вызвать еще до того, как она будет объявлена.

Подобно инструкции

<b>var</b>
, инструкции объявления функций создают переменные, которые невозможно удалить. Однако эти переменные доступны не только для чтения - им можно присвоить другие значения.

5.4. Условные инструкции

Условные инструкции позволяют пропустить или выполнить другие инструкции в зависимости от значения указанного выражения. Эти инструкции являются точками принятия решений в программе, и иногда их также называют инструкциями «ветвления». Если представить, что программа - это дорога, а интерпретатор JavaScript - путешественник, идущий по ней, то условные инструкции можно представить как перекрестки, где программный код разветвляется на две или более дорог, и на таких перекрестках интерпретатор должен выбирать, по какой дороге двигаться дальше.

В подразделах ниже описывается основная условная инструкция языка JavaScript - инструкция

<b>if/else</b>
, а также более сложная инструкция
<b>switch</b>
, позволяющая создавать множество ответвлений.

5.4.1. Инструкция if

Инструкция

<b>if</b>
- это базовая управляющая инструкция, позволяющая интерпретатору JavaScript принимать решения или, точнее, выполнять инструкции в зависимости от условий. Инструкция имеет две формы. Первая:

<b>if (<i>выражение</i>) <i>инструкция</i></b>

В этой форме сначала вычисляется выражение. Если полученный результат является истинным, то инструкция выполняется. Если выражение возвращает ложное значение, то инструкция не выполняется. (Определения истинных и ложных значений приводятся в разделе 3.3.) Например:

<b>if (username == null) // Если переменная username равна null или undefined,</b>

<b>   username = &quot;John Doe&quot;; // определить ее</b>