Quiero entender, cuando envío un globalArray como parámetro a una función recursiva y asigno el mismo conjunto (localArray) al globalArray, ¿cómo está ocurriendo la asignación de memoria en javascript? Sé que cada recursión tendrá su propia pila de llamadas, y tendrá su propia copia de variables, pero dado que estoy pasando un globalArray a la función, ¿se almacenará siempre una copia de localArray como una nueva matriz en cada pila de llamadas?
Si tuviera que lograr localArray como una copia incremental de la misma variable localArray para cada contexto de ejecución, ¿cómo lo lograría?
Por favor, vea la imagen y el fragmento de código 
function testFunction(localArray){ globalArray = localArray; if(itr < 5) { globalArray.push(1); itr++; testFunction(localArray); } } var globalArray = [1,2,3]; var itr = 0; testFunction(globalArray);[agregado más tarde a esta pregunta]
Pero si tuviera que modificar un poco el código en el que hiciera que localArray fuera nulo, globalArray seguiría conteniendo datos, si fuera un valor al que se hiciera referencia.
function testFunction(localArray){ globalArray = localArray; localArray = null; if(itr < 5) { globalArray.push(1); itr++; testFunction(globalArray); } } var globalArray = [1,2,3]; var itr = 0; testFunction(globalArray);... dado que estoy pasando un globalArray a la función, ¿se almacenará siempre una copia del localArray como un nuevo conjunto en cada pila de llamadas?
No. Como señalaron los comentaristas de su pregunta, las matrices se pasan como valores por referencia , lo que significa que la variable globalArray representa el lugar en la memoria donde existe esa matriz. Si cambia una variable que apunta a una matriz (es decir globalArray = ... ), solo está cambiando esa variable. Pero si modifica una matriz (por ejemplo globalArray.push(...) ), está cambiando su contenido para cada variable que busca esa matriz en la memoria, independientemente del nombre de variable que use o dónde exista en la pila .
Si tuviera que lograr localArray como una copia incremental de la misma variable localArray para cada contexto de ejecución, ¿cómo lo lograría?
Hay algunas maneras de hacer algo así.
Por ejemplo, podría clonar la matriz antes de pasarla al siguiente nivel de recursividad, pero si terminara recurriendo muy profundamente, podría usar mucho tiempo y memoria creando matrices y copiando valores que quizás nunca use.
Alternativamente, en lugar de usar matrices, puede crear una estructura de memoria similar a un nodo de lista enlazada, y cada nivel agrega un nodo al final del anterior para pasarlo como una variable. De esa manera, aún es posible recorrer todos los elementos de la pila de llamadas cuando lo necesite, pero usa una cantidad de memoria que es proporcional a la profundidad de la pila de llamadas.
También puede reutilizar una sola matriz global, que push a medida que la pila de llamadas se vuelve más profunda, pero pop los valores antes de regresar de cada nivel de recursividad: básicamente mantiene una pila con estado paralela a la pila de llamadas.
El mejor enfoque probablemente dependerá de los detalles de su algoritmo recursivo y de la cantidad de datos que realmente necesita mantener en cada nivel. En mi experiencia, los parámetros locales que se pasan a cada nivel suelen ser valores de resumen relativamente "planos", como la depth actual de la recursividad, mientras que las variables globales son aquellas en las que se mantiene el estado.