ECMAScript 5.1, частина 8.8
Тип List використовується для пояснення оцінки списків аргументів (див. 11.2.4) у нових виразах, у викликах функцій та в інших алгоритмах, де потрібен простий список значень .... Ці послідовності можуть мати будь-яку довжину.
Тож обмежень у стандарті немає. Звичайно, якщо ваш код працює у реальному світі, а не у стандартах, очевидно, існує певна межа (наприклад, кількість частинок у Всесвіті).
Існує два способи передачі параметрів функції.
- "Буквально":
f(a, b, c)
- З apply ():
f.apply(null, [a, b, c])
Цей останній шлях є більш реалістичним сценарієм для великих списків аргументів.
Перейдіть до цього JSFiddle, щоб побачити обмеження для кожного з них для вашого поточного браузера.
Я сам випробував кілька браузерів:
| 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
Я бачив різницю в багатьох з цих цифр на різних машинах, тому я вважаю, що існують інші фактори, крім просто браузера (ОС?).
Це справжнє питання, а не якісь дрібниці. Реальний приклад:
Бібліотека закриття Google визначила таку функцію.
goog.crypt.byteArrayToString = function(array) {
return String.fromCharCode.apply(null, array);
};
Це спрацювало, лише якщо довжина рядка була в межах браузера для кількості аргументів, які можна передавати Function.prototype.apply.
Пізніше функція була виправлена , що значно ускладнило функцію.
FYI, існує відкрите питання Webkit, подане в березні 2012 року, де обговорюється обмеження аргументів.