【发布时间】:2014-04-03 03:27:10
【问题描述】:
如果我跑了
Array.apply(null, new Array(1000000)).map(Math.random);
在 Chrome 33 上,我得到了
RangeError: Maximum call stack size exceeded
为什么?
【问题讨论】:
-
你到底想做什么?用 1000000 个随机数填充一个数组?还是因为
Array.apply,您有其他想法? -
是的,我正在创建一个包含 1,000,000 个随机数的数组。我正在使用 Function.prototype.apply 因为它不会忽略漏洞。
-
嗯,你已经超过了浏览器支持的
arguments的最大数量。 (通常〜65536)。for循环可能更明智。 -
如果你绝对决定不使用
for循环并且真的想使用map那么你可以使用这个慢得多的方法(至少我希望它是)Object.keys([].concat(Array(10000001).join().split(''))).map(Math.random) -
我写了一个小测试:
console.time('object'); var arr = Object.keys([].concat(Array(1000001).join().split(''))).map(Math.random) console.timeEnd('object'); console.time('loop'); var arr = []; var i = 1000000, while(i--){ arr.push(Math.random()); } console.timeEnd('loop');Object is 2x time faster.
标签: javascript callstack