Действительно ли возможно создать “слабую ссылку” в JavaScript?

88
задан thelastshadow 11 March 2018 в 15:07
поделиться

3 ответа

Нет никакой поддержки языка weakrefs в JavaScript. Вы можете самокрутка с помощью подсчета ссылки на руководство, но не особенно гладко. Вы не можете сделать интерфейсный объект прокси, потому что в объектах JavaScript никогда не знают, когда они собираются быть собранными "мусор".

Так Ваш ‘weak reference’ становится ключом (например, целое число) в простом поиске с добавлять-ссылкой и методом удалять-ссылки, и когда нет никаких вручную прослеженных ссылок больше тогда, запись может быть удалена, оставив будущие поиски на том ключе для возврата пустого указателя.

Это не действительно weakref, но он может решить некоторые из тех же проблем. Это обычно делается в сложных веб-приложениях для предотвращения утечки памяти от браузеров (обычно IE, особенно более старые версии), когда существует ссылочный цикл между Узлом DOM или обработчиком событий и объектом, связанным с ним, таким как закрытие. В этих случаях полная схема подсчета ссылок даже не может быть необходимой.

38
ответ дан bobince 24 November 2019 в 07:37
поделиться

http://www.jibbering.com/faq/faq_notes/closures.html

ECMAScript использует автоматическую сборку "мусора". Спецификация не определяет детали, оставляя это лицам, осуществляющим внедрение для разбираний, и некоторые реализации, как известно, дают очень низкий приоритет своим операциям сборки "мусора". Но общее представление состоит в том, что, если объект становится un-referable (при наличии никаких остающихся ссылок на него оставил доступным для выполнения кода) это становится доступным для сборки "мусора", и будет в некотором моменте в будущем быть уничтоженным и любые ресурсы, которые это использует освобожденный и возвращенный к системе для повторного использования.

Это обычно имело бы место после выхода из контекста выполнения. Цепная структура объема, объект Активации/Переменной и любые объекты, созданные в контексте выполнения, включая функциональные объекты, больше не была бы доступна и так станет доступной для сборки "мусора".

Значение там не является никакими слабыми только, которые больше не становятся доступными.

-4
ответ дан branchgabriel 24 November 2019 в 07:37
поделиться

Для справки; В JavaScript этого нет, но в ActionScript 3 (который также является ECMAScript) есть. Проверьте параметр конструктора для словаря .

2
ответ дан 24 November 2019 в 07:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: