Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用dots运算符时超出了最大调用堆栈大小_Javascript - Fatal编程技术网

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()