Когда функция имеет более трех аргументов, становится трудно запоминать правильный порядок их следования. Чтобы предотвратить ошибки и избавить программиста от необходимости заглядывать в справочное руководство всякий раз, когда он намеревается вставить в программу вызов такой функции, можно предусмотреть возможность передачи аргументов в виде пар «имя–значение» в произвольном порядке. Чтобы реализовать такую возможность, при определе_ нии функции следует учесть передачу объекта в качестве единственного аргу_ мента. Благодаря такому стилю, пользователи функции смогут передавать функции литерал объекта, в котором будут определяться необходимые пары «имя–значение». В следующем фрагменте приводится пример такой функции, а также демонстрируется возможность определения значений по умолчанию для опущенных аргументов:
// Скопировать length элементов из массива from в массив to.
// Копирование начинается с элемента from_start в массиве from
// и выполняется в элементы, начиная с to_start в массиве to.
// Запомнить порядок следования аргументов такой функции довольно сложно. function arraycopy(/* array */ from, /* index */ from_start,
/*
| array */ to,
| /* index */ to_start,
|
/*
| integer */ length)
|
{
// здесь находится реализация функции
}
// Эта версия функции чуть менее эффективная, но не требует
// запоминать порядок следования аргументов, а аргументы from_start
// и to_start по умолчанию принимают значение 0.
function easycopy(args) { arraycopy(args.from,
args.from_start || 0, // Обратите внимание, как назначаются // значения по умолчанию
args.to, args.to_start || 0, args.length);
}
// Далее следует пример вызова функции easycopy(): var a = [1,2,3,4];
var b = new Array(4);
easycopy({from: a, to: b, length: 4});