美文网首页
JS笔记:Maximum call stack size exc

JS笔记:Maximum call stack size exc

作者: 开水的杯子 | 来源:发表于2017-08-08 08:35 被阅读24次

    今天碰到一个很逗的bug:

    var arr1 = [];
    var arr2 = new Array(300000);
    Array.prototype.push.apply(arr1, arr2);
    

    RangeError: Maximum call stack size exceeded

    很多人容易把这个bug认为是recursion的问题,然而最简单的解释其实是你的函数参数太多,把call stack overflow掉了。apply的一个特征是会把第二个参数(array)里面的所有元素转换成参数。如:

    var args = [1, 2, 3, 4];
    foo.apply(this, args);
    

    则会变成

    foo(1, 2, 3, 4);
    

    我们最初的例子中,arr2有30万个元素,这就自然会overflow我们的call stack了。

    相关文章

      网友评论

          本文标题:JS笔记:Maximum call stack size exc

          本文链接:https://www.haomeiwen.com/subject/cygzlxtx.html