При поднятии стека вызовов куски отрезаются от фронта массивов (.slice(size)
):
[0, 1, 2, 3, 4, 5] -> [2, 3, 4, 5] -> [4, 5] -> []
Теперь при каждом рекурсивном вызове существует промежуточное значение, удерживающее вырезанную часть (* 1005)*):
[0, 1] [2, 3] [4, 5]
Теперь разделенные части соединяются вместе, когда стек раскручивается:
[0, 1] [2, 3] [[4, 5]]
[0, 1] [[2, 3], [4, 5]]
[[0, 1], [2, 3], [4, 5]]