Javascript по ссылке и памяти - PullRequest
0 голосов
/ 12 декабря 2018

ребята, я пытаюсь выучить некоторый JavaScript, и у меня есть вопрос, который я считаю важным задать.так что я получил до сих пор, что когда я делаю что-то вроде этого:

var a=function(){} 

на этапе создания, в памяти будет создана переменная (a) с неопределенным значением, и во время выполненияa будет указывать на слот памяти, где находится функция.

так что же происходит со старым местом, на которое указывал a (с неопределенным значением)?также, если я установлю b равным a, это означает, что они будут указывать на один и тот же слот памяти, верно?

что случилось с щелью, на которую ранее указывал b?

наконец, функция сохраняется в памяти на этапе создания, но не может быть вызвана, потому что ничто не указывает на нее, или ее просто сохраняют на этапе выполнения?

спасибо, надеюсь, вы поможете мне прояснить мои мысли (я не могу спать с этими вопросами на моей голове: D)

Ответы [ 3 ]

0 голосов
/ 12 декабря 2018

var a = function () {}

Это не создает указатель на undefined и затем переназначает его на функцию.Он напрямую указывает на функцию.

Даже если вы сделали

var a;
a = function(){};

, a не указывает на случайное место в памяти, которое содержит неопределенное.А не определено.Не определено это значение.И затем вы назначаете его со ссылкой, указывающей на функцию.Неопределенное не нужно очищать, потому что оно подставляется.

Кроме того, базовые значения копируются без ссылки, поэтому:

A = 50; var B = 75; A = B;

Не использует 3 ячейки памяти, только 2, держа сначала 50 и 75, а затем 75 и 75.

Если бы это были объекты, то это были бы ссылки.Что происходит с объектами, когда на них нет ссылок, так это то, что они удаляются сборщиком мусора, что является процедурой, освобождающей память от объектов, на которые больше никто не ссылается.

0 голосов
/ 12 декабря 2018

так, что происходит со старым пятном, на которое указывал a (с неопределенным значением)?

Я не знаю точных деталей каких-либо движков JavaScript, ноЯ подозреваю, что на самом деле нет такого слота.Вместо этого undefined, вероятно, является просто специальным значением, которое помещается в a, которое указывает, что оно никуда не указывает (аналогично NULL в C).

Если на самом деле есть слот памяти для undefined, это единственный объект, на который указывают все неопределенные переменные.С этим ничего не происходит, так как на него все еще указывает множество других переменных.

также, если я установлю b равным a, это означает, что они будут указывать на тот же слот памяти, верно?

Да.Когда вы назначаете переменные в JavaScript, он просто копирует ссылку.

что случилось со слотом, на который ранее указывал b?

Если что-то еще указывает наэто ничего.Если ничто иное не указывает на него, сборщик мусора в конечном итоге восстановит свою память.

, наконец, функция сохраняется в памяти на этапе создания, но не может быть вызвана, потому что ничто не указывает на нее или еепросто сохранить во время выполнения?

Он сохраняется при его создании.Можно создать функцию, даже не назначая ее переменной - это общая идиома, называемая Выражение немедленного вызова функции :

(function() { console.log("Function is running"); })();

Эта функция создается, вызывается и затем становится недоступной.В конце концов сборщик мусора вернет его.

0 голосов
/ 12 декабря 2018

Мне кажется, я понимаю, что вы пытаетесь спросить.Если у вас есть переменная в JavaScript или любой другой язык программирования, имеющий собственный сборщик мусора, и вы ссылаетесь на часть в памяти ... например, допустим, var A = 50;var B = 75;

, и вы хотите развернуться и переназначить A = B;

Память будет освобождена, и A теперь будет 75.

Вот некоторая документация, которая может объяснить более подробно: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Memory_Management

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...