kamaltdin
@kamaltdin
Изучающий программирование,в данный момент node.js

Можно ли переменной, ссылающейся на массив, присвоить метод slice того же массива? Тут не будет ошибки и старый массив продолжит существование?

var array = [1];
var collection = [];
collection.push(array);
array = array.slice();
array[1] = 2;

Старый массив нормально продолжит существование в collection во всех браузерах? Тут нет ошибки? Новый массив также будет нормальным рабочим массивом? В общем можно ли так делать или такой метод программирования может иметь в виде последствия проблемы?
  • Вопрос задан
  • 122 просмотра
Пригласить эксперта
Ответы на вопрос 2
Stalker_RED
@Stalker_RED
Новый массив нормальный, да. Старый массив продолжит существовать пока на него есть ссылки. Если на него никто не ссылается, то он еще чуток поживет, а потом его сборщик мусора удалит.

В вашем примере на него ссылается collection, но если удалить collection, то и старый массив удалится.

Вот вам такой примерчик:
А разгадка простая:

В этом примере всего два массива. Первый, который [1,2,3], и второй, который создается при вызове slice.

Три переменные с именами a, b, c, которые ссылаются сперва на один и тот-же массив, затем переменная a ссылается на тот, который создан при помощи slice.
И после изменения первоначального массива (b[1] = 'bar') этот измененный массив продолжает быть доступным по переменным b и c.
Ответ написан
@kuftachev
Самый простой способ узнать это, просто проверить, если есть сомнения.

Вообще, в разных языках методы могут как изменять исходный массив, так и не изменять, если важно, чтобы исходный массив не трогать, используются всякие штуки из функционального программирования, обычно это во всех языках проведение одинаково.

Типа map(), forEach(), filter(), reduce().

Также разберитесь когда передается ссылка, а когда значение, чтобы хотя бы понимать, что это разные вещи и когда будет что-то не получается, может оказаться, что забыли именно это.

Ещё почитайте о порядке вычисления выражений, в данном случае, очевидно, что сначала вычислиться функция, потом ее значение провалится тому, что справа.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
19 апр. 2024, в 05:01
999999 руб./за проект
19 апр. 2024, в 03:52
1000 руб./за проект
19 апр. 2024, в 03:01
1000 руб./за проект