Javascript 使用dots运算符时超出了最大调用堆栈大小
我尝试将Javascript 使用dots运算符时超出了最大调用堆栈大小,javascript,Javascript,我尝试将min()和max()函数添加到数组中,使用…运算符实现: Array.prototype.min = Array.prototype.min || function () { return Math.min(...this); }; 然而,当在大型阵列上调用这些函数时,我得到一个异常:“RangeError:超出了最大调用堆栈大小”。发生了什么事 console.log(new Array(100000).min()); /* works */ console.log(ne
min()
和max()
函数添加到数组中,使用…
运算符实现:
Array.prototype.min = Array.prototype.min || function () {
return Math.min(...this);
};
然而,当在大型阵列上调用这些函数时,我得到一个异常:“RangeError:超出了最大调用堆栈大小”。发生了什么事
console.log(new Array(100000).min()); /* works */
console.log(new Array(1000000).min()); /* error */
因此,当您定义一个更大的数组并使用扩展操作符时,javascript调用堆栈基本上已经满了。 而且,即使它能工作100000个元素,性能也会最差
如果您想在大数组上工作(查找最小值和最大值),最好使用for循环。因此,基本上,当您定义一个更大的数组并使用扩展运算符时,javascript调用堆栈已满。 而且,即使它能工作100000个元素,性能也会最差
如果您想在大型阵列上工作(查找最小值和最大值),最好使用for循环。我认为您遇到了堆栈溢出。浏览器将有限内存分配给Javascript调用堆栈。正如@Pointy在评论中提到的,您试图传递100万个参数。虽然您的代码可能很短,但它相当于:
const arr=新数组(1000000)
算术最小值(arr[0],arr[1],arr[2]…arr[100000]…arr[999999])
您的JS环境无法处理它是有道理的
指的是这个问题,只是建议迭代数组以找到最小值
可能更有效的解决方案是构建一个专用函数,将阵列划分为环境可以处理的较小组。找到每个组的最小值后,最小值的最小值就是整个组的最小值
另一方面,我建议不要污染阵列原型。我知道(和其他答案)推荐使用它,但污染阵列的原型并不安全,因为您可能会影响第三方库。我认为您遇到了堆栈溢出。浏览器将有限内存分配给Javascript调用堆栈。正如@Pointy在评论中提到的,您试图传递100万个参数。虽然您的代码可能很短,但它相当于:
const arr=新数组(1000000)
算术最小值(arr[0],arr[1],arr[2]…arr[100000]…arr[999999])
您的JS环境无法处理它是有道理的
指的是这个问题,只是建议迭代数组以找到最小值
可能更有效的解决方案是构建一个专用函数,将阵列划分为环境可以处理的较小组。找到每个组的最小值后,最小值的最小值就是整个组的最小值
另一方面,我建议不要污染阵列原型。我知道(和其他答案)推荐使用它,但污染阵列的原型并不安全,因为您可能会影响第三方库。参数在调用堆栈上传递,您试图将一百万个参数传递给
Math.min()
。参数在调用堆栈上传递,您正试图将一百万个参数传递给Math.min()
。