ECMAScript 5.1, Teil 8.8
Der Listentyp wird verwendet, um die Auswertung von Argumentlisten (siehe 11.2.4) in neuen Ausdrücken, in Funktionsaufrufen und in anderen Algorithmen zu erläutern, bei denen eine einfache Werteliste erforderlich ist. Diese Sequenzen können beliebig lang sein.
Der Standard kennt also keine Grenzen. Wenn Ihr Code in der realen Welt und nicht im Standardland ausgeführt wird, gibt es natürlich eine gewisse Grenze (z. B. Anzahl der Partikel im Universum).
Es gibt zwei Möglichkeiten, Parameter an eine Funktion zu übergeben.
- "Buchstäblich":
f(a, b, c)
- Mit apply ():
f.apply(null, [a, b, c])
Dieser letztere Weg ist das realistischere Szenario für große Argumentlisten.
Gehen Sie zu dieser JSFiddle , um die jeweiligen Grenzwerte für Ihren aktuellen Browser anzuzeigen .
Ich habe selbst ein paar Browser ausprobiert:
| apply() | literal
----------------------------
Chrome 14 | 131155 | 32767
Chrome 35 | 126213 | 65535
Firefox 30 | 500001 | 65535
IE 9 | 254335 | 65533
IE 10 | 253667 | 65533
IE 11 | 252447 | 65533
Opera 22 | 126063 | 65535
Safari 4 | 524215 | 524205
Safari 7 | 65537 | 522159
Ich habe Unterschiede in vielen dieser Zahlen auf verschiedenen Computern gesehen, daher glaube ich, dass neben dem Browser (dem Betriebssystem?) Andere Faktoren eine Rolle spielen.
Dies ist ein echtes Problem, keine Trivia. Ein Beispiel aus der Praxis:
Die Google Closure Library hat die folgende Funktion definiert.
goog.crypt.byteArrayToString = function(array) {
return String.fromCharCode.apply(null, array);
};
Dies funktionierte nur, wenn die Länge der Zeichenfolge innerhalb des Browserlimits für die Anzahl der Argumente lag, mit denen übergeben werden kann Function.prototype.apply.
Die Funktion wurde später gepatcht , was die Funktion erheblich komplizierter machte.
Zu Ihrer Information, im März 2012 wurde ein offenes Webkit-Problem eingereicht, in dem die Argumentationsgrenze erörtert wird.