Выразительный JavaScript (Хавербеке) - страница 22

Определение функции

Определение функции – обычное определение переменной, где значение, которое получает переменная, является функцией. Например, следующий код определяет переменную square, которая ссылается на функцию, подсчитывающую квадрат заданного числа:

>var square = function(x) {

>  return x * x;

>};


>console.log(square(12));

>// → 144

Функция создаётся выражением, начинающимся с ключевого слова >function. У функций есть набор параметров (в данном случае, только >x), и тело, содержащее инструкции, которые необходимо выполнить при вызове функции. Тело функции всегда заключают в фигурные скобки, даже если оно состоит из одной инструкции.

У функции может быть несколько параметров, или вообще их не быть. В следующем примере >makeNoise не имеет списка параметров, а у >power их целых два:

>var makeNoise = function() {

>  console.log("Хрясь!");

>};


>makeNoise();

>// → Хрясь!


>var power = function(base, exponent) {

>  var result = 1;

>  for (var count = 0; count < exponent; count++)

>    result *= base;

>  return result;

>};


>console.log(power(2, 10));

>// → 1024

Некоторые функции возвращают значение, как >power и >square, другие не возвращают, как >makeNoise, которая производит только побочный эффект. Инструкция >return определяет значение, возвращаемое функцией. Когда обработка программы доходит до этой инструкции, она сразу же выходит из функции, и возвращает это значение в то место кода, откуда была вызвана функция, >return без выражения возвращает значение >undefined.

Параметры и область видимости

Параметры функции – такие же переменные, но их начальные значения задаются при вызове функции, а не в её коде.

Важное свойство функций в том, что переменные, созданные внутри функции (включая параметры), локальны внутри этой функции. Это означает, что в примере с >power переменная >result будет создаваться каждый раз при вызове функции, и эти отдельные её инкарнации никак друг с другом не связаны.

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

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