title
является локальной переменной.Он будет существовать до тех пор, пока некоторый код может получить к нему доступ.Он будет существовать только один раз, поскольку IIFE выполняется только один раз, поэтому создается только одна переменная.Функция внутри addEmoticon
может обращаться к title
, другими словами, она закрывает ее .Поскольку он сам по себе локальный, он будет существовать только до тех пор, пока к нему можно получить доступ.Доступ к нему осуществляется внутри функции, хранящейся в proto.getTitle
, которая снова закрывается над addEmoticon
.proto.getTitle
существует до тех пор, пока к proto
можно получить доступ.Поскольку значение proto
сохраняется в глобальной переменной const myObjectProto
, к нему всегда можно получить доступ, поэтому оно будет жить вечно (как и любое значение, к которому можно получить доступ через него, например, title
).
Эффективно ли я использую память с этим шаблоном?
Ну, вы выделяете несколько байтов один раз.Если предположить, что у вас есть несколько мегабайт, это не так уж много.
Насколько я знаю, заголовок распределяется между ними
Да.
Исходя из того, что у нас есть общие переменные, такие как title и даже proto, я думаю, что это ничего не делает, и у меня утечка памяти.
Вы теряете ссылку на экземпляр, хранящийся в firstObject
, что делает его пригодным для сбора мусора.Это может освободить несколько байтов.Поскольку прототип все еще доступен через secondObject
и myObjectProto
, он будет продолжать жить.
У меня утечка памяти.Я прав?
Утечка памяти - это заметный объем памяти, который по-прежнему выделяется, хотя значения в нем больше не нужно использовать.При условии, что вы хотите работать с secondObject
и создавать новые экземпляры из myObjectProto
, все, что вы сохранили , по-прежнему необходимо .Ваш код в порядке.