Возможность «утечки памяти» не имеет отношения к вопросу, который вы, похоже, задаете. То есть ни один из подходов не влияет на использование памяти, по крайней мере, для меня это никоим образом не ясно.
Причина, по которой вы можете предпочесть использование средства this
в своем коде, заключается в том, что вам может понадобиться множество объектов. В вашем случае вы, очевидно, используете объект как синглтон, так что это не имеет значения. Однако это действительно особый случай, и вы быстро обнаружите, что он работает не так хорошо, если у вас есть 100 «пользовательских» объектов.
Сохранение значения this
(и на самом деле это не "переименование" this
; копирование его значения в другую переменную) внутри замыкания может привести к утечке памяти или, скорее, может быть частью большей утечки памяти, но это само по себе не проблематично. Копирование ссылок на объекты - это то, что происходит постоянно.
изменить & mdash; проблема «утечки» с замыканиями возникает, когда происходит комбинация вещей:
- На некоторые объекты ссылаются переменные в области замыкания (не странно и не вредно само по себе);
- Функции со ссылками на область замыкания, "убегающие" из вызова функции, либо возвращаемые, либо экспортируемые через глобальные побочные эффекты состояния (такие как регистрация обработчика событий) (также не странные и не вредные сами по себе) ;
- Число этих экспортируемых функций увеличивается, или сами функции выделяют больше места при их вызове и сохраняют ссылки на пространство, выделенное в замыкании, или экспортируемые функции заканчиваться прямой ссылкой на узлы DOM (это особенно проблема в IE).
Действительно, у JavaScript нет уникальных проблем с утечками памяти, которые есть у любого языка с реальными замыканиями. Я подозреваю, что для огромного количества реального программного обеспечения JavaScript в этом мире (служебный код, подключенный к веб-страницам), утечка памяти является довольно редкой проблемой, хотя проблема IE с ссылками DOM, вероятно, привела к падению нескольких браузеров за эти годы ( что вряд ли удивило несчастных пользователей).
Мне не нравится навязывать людям фреймворки, но, безусловно, верно, что авторы фреймворков должны беспокоиться об этом. Поэтому хорошей идеей является доверие к вашей среде для поддержания DOM в чистоте, поскольку вы должны только прикреплять обработчики событий и данные к DOM через средства инфраструктуры.