Neomezený počet argumentů ve funkci JavaScriptu

Může funkce JavaScript přijímat neomezené množství argumentů? Něco takového:

testArray(1, 2, 3, 4, 5...);

Snažím se:

var arr = [];
function testArray(A) {
    arr.push(A);
}

Ale to nefunguje (výstup je pouze prvním argumentem). Nebo jediný způsob je:

function testArray(a, b, c, d, e...) {

}

Díky

Odpověď

Existuje podivná „magická“ proměnná, na kterou můžete odkazovat, nazývaná „argumenty“:

function manyArgs() {
  for (var i = 0; i < arguments.length; ++i)
    alert(arguments[i]);
}

Je to jako pole, ale není to pole. Ve skutečnosti je to tak zvláštní, že byste to opravdu neměli moc používat. Běžnou praxí je dostat jeho hodnoty do skutečnosti pole:

function foo() {
  var args = Array.prototype.slice.call(arguments, 0);
  // ...

V tomto příkladu by „args“ bylo normální pole bez jakékoli podivnosti. S „argumenty“ jsou nejrůznější ošklivé problémy a v ECMAScriptu 5 bude jeho funkčnost omezena.

upravit — i když pomocí .slice() Funkce je jistě pohodlná, ukázalo se, že předání arguments objekt mimo funkci způsobuje optimalizaci hlavy natolik, že funkce, které to dělají, nemusí být optimalizovány vůbec. Jednoduchý a přímočarý způsob, jak otočit arguments do pole je tedy

function foo() {
  var args = [];
  for (var i = 0; i < arguments.length; ++i) args[i] = arguments[i];
  // ...
}

Další informace o arguments a optimalizace.