Какая польза от циклической ссылки в JavaScript - PullRequest
0 голосов
/ 21 января 2019

Мне было интересно, несмотря на утечку памяти, что такое циклическая ссылка в javascript? Даже window объект в браузере имеет круглую ссылку, как window.window.window ...... Почему мы это используем и где мы можем это использовать. Каковы его хорошие части?

Ответы [ 2 ]

0 голосов
/ 21 января 2019

Мне было интересно, несмотря на утечку памяти,

Нет утечки памяти, два объекта, которые ссылаются друг на друга, но нигде не связаны, собирают мусор. Объект window никогда не будет собран, поэтому здесь все равно не имеет значения.

какая польза от циклической ссылки в javascript?

Как и в любом другом языке, они могут использоваться для различных структур, таких как деревья (parent <-> child), связанные списки (left <-> right) и отношения «многие ко многим» (ученики <-> классы) , Отсутствие их усложнит некоторые формы обхода и значительно замедлит работу программ.

Почему window.window является круговой ссылкой?

window - это не только объект, но и самая глобальная область, в которой все переменные наконец-то ищутся. Когда вы используете любую глобальную переменную, такую ​​как setTimeout, она ищется в глобальной области видимости и, следовательно, в объекте window.

 window.setTimeout === /*window.*/setTimeout

Теперь, если вы хотите сослаться на глобальный объект, его нужно искать в глобальной области, которая сама является глобальным объектом.

 window.window === /*window.*/window

Поэтому только window уже обращается к циклической ссылке, это причина, по которой глобальный объект может быть найден вообще. В противном случае window должно быть зарезервированным ключевым словом.

0 голосов
/ 21 января 2019

см. Эту страницу, есть веские причины Почему свойство window.window существует?

Точка наличия свойства окна, относящегося к самому объекту, вероятно, облегчила обращение к глобальному объекту. В противном случае вам нужно будет сделать ручное окно var = this; задание вверху вашего скрипта.

Другая причина заключается в том, что без этого свойства вы не сможете написать, например, "window.open ('http://google.com/')". Вам придется использовать" open (' * 1011). * вместо.

.

и посмотрите этот ответ также https://stackoverflow.com/a/35788599/1475257

...