4 ms·
Got to be careful with the argument spread, since depending on the JS engine and how large the `list` is, you can end up with a RangeError e.g., Math.max(
by emptysea 5y ago
Got to be careful with the argument spread, since depending on the JS engine and how large the `list` is, you can end up with a RangeError
e.g.,
Math.max(...Array(100_0000).fill(0))
results in:
Uncaught RangeError: Maximum call stack size exceeded
- bcoates 5y agoBizarre. on V8 this seems to be an underlying limit on Function.prototype.apply -- and in the REPL, it's not even deterministic, somewhere in the neighborhood of 123,125. (side effect of optimization?) It's enforced on the caller side as well, the empty function with no arguments still throws when apply'd too large an array. It's not at all clear to me why this would be a necessary limit to exist, as functions can't reasonably have more than a few hundred formal parameters so passing 100,000 would always imply using unspread or arguments on the receiver, which could surely trivially handle arbitrarily sized arrays.
- emptysea 5y agoIn V8 I believe it's limited by the stack size and when you get a stack overflow that gets converted to a RangeError in JS land. OTOH, Webkit and Firefox have arbitrary limits 65537, and 500k args. https://bugs.webkit.org/show_bug.cgi?id=80797 https://bugs.webkit.org/show_bug.cgi?id=80797 https://github.com/mozilla/gecko-dev/blob/1475b3b0cb274b2a711befa0697af28d79859bba/js/src/vm/ArgumentsObject.h#L98 https://github.com/mozilla/gecko-dev/blob/1475b3b0cb274b2a71...