Определение функции – обычное определение переменной, где значение, которое получает переменная, является функцией. Например, следующий код определяет переменную 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
внутри функции относится к глобальной переменной