以下代码
var interval = function (a, b) {
var i, list = [];
for (i = a; i <= b; i++) {
list.push(i);
}
return list;
},
xs = interval(1, 500000);
Math.max.apply(null, xs);
生成Uncaught RangeError:超出最大调用堆栈大小。 怎么克服?
请注意,区间函数只是生成测试数据的快捷方式。
我使用了Math.max.apply方法,因为它在这里描述:Mozilla developer network
这不是一个可接受的解决方案,因为javascript具有允许函数调用的最大参数数量,这要归功于Rocket Hazmat指出它,请参阅他的答案以获取更多信息。
underscore.js库使用max函数的简单实现,我相信最合适的解决方案是在代码库中包含一个简单的max实现并使用它。有关详细信息,请参阅@AnotherDev答案
答案 0 :(得分:4)
问题在于:
Math.max(1, 2, 3, 4, ..., 500000);
您正试图致电didUpdateLocations
。 JavaScript并不像调用具有500,000个参数的函数。
有关详细信息,请参阅此答案:https://stackoverflow.com/a/22747272
答案 1 :(得分:3)
如果您想要解决方法,可以使用underscore.js
从source code开始,看起来他们只是使用for循环遍历元素
for (var i = 0, length = obj.length; i < length; i++) {
value = obj[i];
if (value > result) {
result = value;
}
}
Here is an example in JSFiddle
var interval = function (a, b) {
var i, list = [];
for (i = a; i <= b; i++) {
list.push(i);
}
return list;
},
xs = interval(1, 500000);
console.log(_.max(xs))
//prints 500000