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.