Показать сообщение отдельно
  #6 (permalink)  
Старый 24.10.2012, 15:24
Профессор
Отправить личное сообщение для Маэстро Посмотреть профиль Найти все сообщения от Маэстро
 
Регистрация: 02.07.2010
Сообщений: 642

Сообщение от melky Посмотреть сообщение
в основах JS говорится, что объекты передаются не по значению, а по ссылке.
т.е. многомегабайтовый объект останется валяться там, где валялся.
Да, говорится. Но не факт. Что означает по ссылке? Это означает, что если после "передачи объекта" изменить второй объект, то изменения незамедлительно отразятся в первом объекте. Это значит, что и первый, и второй объект ссылаются на одну и ту же зону памяти, которая "валяется там, где валяется". Так с объектами. Однако не со свойствами объектов (при их копировании одного другому). Сравните:
var m1 = {};
var m2 = {};
var m3 = {};
      
m1[5]='mama';
m2=m1; // присвоение по ссылке
m3[5] = m1[5]; // присвоение не по ссылке (копирование/дублирование данных)
m1[5] = 'privet'; // изменим объект m1 - повлияет ли он на m2 и m3? 
      
alert('m1[5]=' + m1[5] + ' m2[5]=' + m2[5] + ' m3[5]=' + m3[5]);
// выведет: m1[5]=privet m2[5]=privet m3[5]=mama
Ответить с цитированием