最大的数组我可以安全地传递给function.apply()/ spread运算符

rid*_*ish 3 javascript arrays

计算数组最大值的"JavaScriptonic"方法是:

Math.max.apply(null, array)
Run Code Online (Sandbox Code Playgroud)

但是,在大小为2 ^ 16(Chrome,Safari)或2 ^ 18(Firefox)的阵列上出现"超出最大调用堆栈大小"的错误.见https://jsfiddle.net/dxcot206/

我怎样才能安全地使用这种技术?是否有最大的阵列长度可以保证这种技术有效?

在WebWorker中,答案可能会有所不同,因为后台线程通常具有较小的堆栈大小?

Ber*_*rgi 5

我怎样才能安全地使用这种技术?

一点也不.

是否有最大的阵列长度可以保证这种技术有效?

不,规范中没有对此类内容的要求,您所看到的都是依赖于实现的" 我们不支持上面不合理的大型参数列表N "限制.

计算数组最大值的"JavaScriptonic"方法是: Math.max.apply(null, array)

它只是短暂的,但效率不高,而且你所看到的可能不起作用.更好用array.reduce((a, b) => Math.max(a, b)).

  • 感谢您的回答。令人痛苦的是,ES6 将通过新的扩展运算符进一步巩固这种做法。 (2认同)