Maximum call stack size exceeded error

后端 未结 30 2600
独厮守ぢ
独厮守ぢ 2020-11-21 23:51

I am using a Direct Web Remoting (DWR) JavaScript library file and am getting an error only in Safari (desktop and iPad)

It says

Maximum call

30条回答
  •  攒了一身酷
    2020-11-22 00:40

    This can also cause a Maximum call stack size exceeded error:

    var items = [];
    [].push.apply(items, new Array(1000000)); //Bad
    

    Same here:

    items.push(...new Array(1000000)); //Bad
    

    From the Mozilla Docs:

    But beware: in using apply this way, you run the risk of exceeding the JavaScript engine's argument length limit. The consequences of applying a function with too many arguments (think more than tens of thousands of arguments) vary across engines (JavaScriptCore has hard-coded argument limit of 65536), because the limit (indeed even the nature of any excessively-large-stack behavior) is unspecified. Some engines will throw an exception. More perniciously, others will arbitrarily limit the number of arguments actually passed to the applied function. To illustrate this latter case: if such an engine had a limit of four arguments (actual limits are of course significantly higher), it would be as if the arguments 5, 6, 2, 3 had been passed to apply in the examples above, rather than the full array.

    So try:

    var items = [];
    var newItems = new Array(1000000);
    for(var i = 0; i < newItems.length; i++){
      items.push(newItems[i]);
    }
    

提交回复
热议问题