A cópia do código é a seguinte:
a = new Array ();
b = nova matriz (125624);
A.Push.Apply (A, B);
O código acima lança a seguinte exceção em Mac Chrome
A cópia do código é a seguinte:
RangeError não capturado: tamanho máximo da pilha de chamadas excedida
Se você alterar a matriz para B = nova matriz (125623); Seria ótimo se você tivesse um elemento menor. Eu testei que outros navegadores também têm problemas com grandes matrizes, mas os valores críticos de diferentes navegadores ainda são diferentes.
Eu pesquisei http://stackoverflow.com/questions/1374126/how-to-append-an-array-to-an-existing-javascript-array/17368101#17368101 e descobri que alguém encontrou uma armadilha:
A cópia do código é a seguinte:
Array.prototype.extend = function (outros_array) {
/ * Você deve incluir um teste para verificar se outros_array realmente são uma matriz */
outros_array.foreach (function (v) {this.push (v)}, this);
}
As sugestões dadas devem ser honestas e práticas foreach, o que pode não apenas evitar os problemas de exceção de grandes matrizes, mas também considerar o desempenho de foreach como o mais rápido
Este pequeno poço me deu dois pensamentos:
1. Alguns usos sofisticados, como a.push.apply (a, b); É suficiente ser usado para exibir quando as perguntas da entrevista. Na prática, é melhor seguir o caminho honesto para evitar encontrar anormalidades e armadilhas de desempenho. Por exemplo, um pequeno número de exemplos de layout de mola de topologia de rede 3D com dezenas de nós neste artigo são bons. Somente quando você encontra volumes reais de big data, como HT para exemplos de desempenho da web neste artigo, você pode testar o problema.
2. Http://stackoverflow.com/questions/1374126 Ao procurar respostas do Stackoverflow, não se concentre apenas nos que mais votam. A verdade está muitas vezes nas mãos de algumas pessoas. A resposta com 259 votos na figura abaixo é um poço e 34 votos são a análise mais perfeita: