(Из книги "Говоря на языке JavaScript").
Один из способов определения функции (ее декларация) выглядит так:
Определения функций обрабатываются раньше, чем остальной код. Это позволяет вызывать их в коде раньше, чем декларировать:
Вы
можете вызвать любую функцию в JavaScript с произвольным числом
аргументов. С этим проблем не будет. Это дает возможность сделать
доступными все аргументы посредством особой переменной
Давайте
используем нижеследующую функцию для того, чтобы исследовать, как
избыток или недостаток аргументов обрабатывается в JavaScript (функция
Вот как можно присвоить параметрам значения по умолчанию:
Арность — количество аргументов, или операндов. Слово образовалось
из названий предикатов небольшой арности (унарный — один аргумент,
бинарный — два, тернарный — три).
Если вы хотите принудительно усилить арность (всегда передавать строго определенное количество аргументов), вы можете проверять длину массива аргументов
Перемення
function
add
(
param1
,
param2
)
{
return
param1
+
param2
;
}
Этот код определяет функцию add
, которая получает два параметра (param1
и param2)
и возвращает их сумму. А вот как вызвать эту функцию:add(6, 1) // Вернет 7. add('a', 'b') // Вернет 'ab'.
Другой способ создать функцию
add()
- присвоить ее описание переменной add
:
var
add
=
function
(
param1
,
param2
)
{
return
param1
+
param2
;
};
Функции могут производить некое значение и передаваться в качестве параметров другим функциям:
someOtherFunction
(
function
(
p1
,
p2
)
{
...
});
"Возвышающиеся" декларации функций
function
foo
()
{
bar
();
// OK, bar is hoisted
function
bar
()
{
...
}
}
Обратите внимание, что такими же свойствами обладает декларирование переменных (см. "Возвышающиеся" переменные), но не обращение к ним:function
foo
()
{
bar
();
// Not OK, bar is still undefined
var
bar
=
function
()
{
// ...
};
}
Особая переменная arguments
arguments
. Она выглядит как массив, но не обладает методами массива:function f() { return arguments } var args = f('a', 'b', 'c'); args.length // Равно 3. args[0] // Аргумент с индексом 0 это 'a'
Слишком много или слишком мало аргументов
toArray()
показана в разделе Преобразование аргументов в массив):
function
f
(
x
,
y
)
{
console
.
log
(
x
,
y
);
return
toArray
(
arguments
);
}
Дополнительные параметры функции toArray()
можно проигнорировать, за исключением параметра arguments
:f('a', 'b', 'c') // Выведет a b, вернет [ 'a', 'b', 'c' ].
Недостающие параметры получают значение
undefined
:f('a') // Выведет a undefined, вернет [ 'a' ]. f() // Выведет undefined undefined, вернет [].
Дополнительные параметры
function
pair
(
x
,
y
)
{
x
=
x
||
0
;
// (1)
y
=
y
||
0
;
return
[
x
,
y
];
}
В строке (1) оператор ||
возвращает x
если он истинен (не null
, undefined
, и т.д). В противном случае ему присваивается возвращается второй операнд (0):pair() // Вернет [ 0, 0 ]. pair(3) // Вернет [ 3, 0 ] pair(3, 5) // Вернет [ 3, 5 ]
Принудительная арность
Если вы хотите принудительно усилить арность (всегда передавать строго определенное количество аргументов), вы можете проверять длину массива аргументов
arguments.length
:
function
pair
(
x
,
y
)
{
if
(
arguments
.
length
!==
2
)
{
throw
new
Error
(
'Need exactly 2 arguments'
);
}
...
}
Преобразование переменной arguments в массив
arguments
это не массив в строгом смысле (см. Массивоподобные объекты и общие методы). Она имеет свойство length
,
вы можете обращаться к ее элементам с помощью индексов в квадратных
скобках, но вы не можете удалять элементы или пользоваться методами
объектов типа Array. Поэтому иногда требуется преобразовать arguments
в массив, чем и занимается нижеописанная функция (ее работа объясняется в разделе Массивоподобные объекты и общие методы):
function
toArray
(
arrayLikeObject
)
{
return
Array
.
prototype
.
slice
.
call
(
arrayLikeObject
);
}
Комментариев нет:
Отправить комментарий