Предположим, у меня есть функция который просматривает массив...
flatten([a, b, c, d, [e, f, g, [h, i, j, k], l], m, n, o, p])
>> [a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p]
Flatten просматривал код и для каждого встречающегося массива рекурсивно входил в этот массив и возвращал значения, так что у вас был плоский массив.
Это работает до тех пор, пока у нас не будет такого массива:
a = [];
a[0] = a;
Очевидно, что это создает бесконечную рекурсию:
Array[1]
0: Array[1]
0: Array[1]
0: Array[1]
0: Array[1]
0: Array[1]
0: Array[1]
...
Как я могу обнаружить это поведение, не изменяя массив так, чтобы функция могла с этим справиться?