Да, они похожи, но они тоже разные.Я бы не стал использовать arguments
для всего, что действительно не должно обрабатывать переменные числа аргументов;Я бы использовал объявленные аргументы и / или объект options
.(Также обратите внимание, что на большинстве движков JavaScript, использование псевдомассива arguments
[это не совсем массив] влечет за собой штраф за скорость выполнения по сравнению с использованием объявленных аргументов или даже объекта options
. См."примечание стороны" ниже, хотя, конечно, вы должны вызывать функцию lot , чтобы эти издержки имели значение в реальном мире.)
Использование объявленных аргументов для функций, которые принимают только паруаргументов, как правило, имеет смысл, например:
x = parseInt(str, 10);
Если бы parseInt
использовал объект options
в стиле, вам нужно было бы написать это как:
x = parseInt({string: str, radix: 10}); // Note: parseInt doesn't actually work this way
..или аналогичный, который больше печатать при каждом вызове.Так что это недостаток.
Но когда вы получаете много аргументов и особенно много необязательных аргументов, использование шаблона options
, в котором вы передаете объект вместо дискретных аргументов, можетиметь реальные выплаты.Рассмотрим функцию jQuery ajax
.Он имеет ~ 32 опции , которые вы можете передать на него, почти все они необязательны.Точно так же, как вы, вероятно, не захотите кодировать каждый parseInt
, как указано выше, вы, вероятно, не захотите кодировать каждый ajax
вызов следующим образом:
$.ajax(
"/path/to/resource",
function(data) {
},
undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined,
undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined,
undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined,
undefined, undefined, undefined, undefined, undefined, undefined
);
... либо.: -)
Одно практическое правило, которое я слышал о дискретных аргументах и объектах стиля options
, - когда вы получите четыре аргумента, люди начнут терять.Конечно, вы захотите нарисовать собственную линию.
Примечание: подробнее о том, что arguments
медленнее, чем объявленные аргументы, попробуйте этот тест .Теперь, конечно, накладные расходы не имеют значения большую часть времени , поэтому большую часть времени это не имеет значения .Но для тех времен это так, вот результаты от меня и других:
Как вы можете видеть, использование объявленных аргументов является самым быстрым на сегодняшний день практически во всех движках.Я даже добавил что-то, сравнивающее arguments
с передачей в массиве, для тех случаев вам действительно нужно переменное количество аргументов (ответ: с массивом вам лучше).