Ответ 1
Объекты всегда передаются по ссылке в JavaScript (см. этот популярный ответ). Указатель на объект занимает некоторое количество памяти (зависит от реализации), конечно, но гораздо меньше, чем фактический объект.
Предположим, что у вас есть следующий сложный объект:
var object1 = .... // (something complexed)
Это занимает x
количество памяти в вашем приложении JS. Теперь скажем, что у вас есть другие объекты, которые ссылаются на object1
:
var otherObject = { something: true, value: 'yes', object: object1 };
var anotherObject = { color: '#FFF', object: object1 };
Разве я утроил объем памяти, который первоначально принимал object1
? Или ссылки на object1
не добавляют к служебным данным используемой памяти?
Я не уверен, как проверить это сам, чтобы определить ответ. (Бонусные баллы, если вы можете сказать мне, как указать мне инструмент, который помогает проверить это).
Объекты всегда передаются по ссылке в JavaScript (см. этот популярный ответ). Указатель на объект занимает некоторое количество памяти (зависит от реализации), конечно, но гораздо меньше, чем фактический объект.
Взгляните на этот вопрос. Числа, строки и т.д. Всегда вызывается значением, но объекты вызываются путем совместного использования; то есть они вызываются по значению, но это значение является ссылкой на объект.
Другими словами, если вы изменяете свойства указателя, вы изменяете тот же пул памяти, что и объект. Но если вы переназначите указатель, это не повлияет на исходный объект.
Это означает, что в вашем примере вы не утроили объем памяти, который object1
занял, , но дополнительные указатели на object1
занимают некоторое пространство памяти. Сколько места? Это зависит от точной реализации движка Javascript, но всегда будет намного меньше размера объекта.
Что касается бенчмаркинга, посмотрите документацию Mozilla для своего движка JS, SpiderMonkey. Там есть много хороших коммунальных услуг....