Можно ли переменной, ссылающейся на массив, присвоить метод slice того же массива? Тут не будет ошибки и старый массив продолжит существование?
Новый массив нормальный, да. Старый массив продолжит существовать пока на него есть ссылки. Если на него никто не ссылается, то он еще чуток поживет, а потом его сборщик мусора удалит.
В вашем примере на него ссылается collection, но если удалить collection, то и старый массив удалится.
Вот вам такой примерчик:snippetА разгадка простая:
В этом примере всего два массива. Первый, который [1,2,3], и второй, который создается при вызове slice.
Три переменные с именами a, b, c, которые ссылаются сперва на один и тот-же массив, затем переменная a ссылается на тот, который создан при помощи slice.
И после изменения первоначального массива (b[1] = 'bar') этот измененный массив продолжает быть доступным по переменным b и c.
Самый простой способ узнать это, просто проверить, если есть сомнения.
Вообще, в разных языках методы могут как изменять исходный массив, так и не изменять, если важно, чтобы исходный массив не трогать, используются всякие штуки из функционального программирования, обычно это во всех языках проведение одинаково.
Типа map(), forEach(), filter(), reduce().
Также разберитесь когда передается ссылка, а когда значение, чтобы хотя бы понимать, что это разные вещи и когда будет что-то не получается, может оказаться, что забыли именно это.
Ещё почитайте о порядке вычисления выражений, в данном случае, очевидно, что сначала вычислиться функция, потом ее значение провалится тому, что справа.