так, что происходит со старым пятном, на которое указывал a
(с неопределенным значением)?
Я не знаю точных деталей каких-либо движков JavaScript, ноЯ подозреваю, что на самом деле нет такого слота.Вместо этого undefined
, вероятно, является просто специальным значением, которое помещается в a
, которое указывает, что оно никуда не указывает (аналогично NULL
в C).
Если на самом деле есть слот памяти для undefined
, это единственный объект, на который указывают все неопределенные переменные.С этим ничего не происходит, так как на него все еще указывает множество других переменных.
также, если я установлю b равным a, это означает, что они будут указывать на тот же слот памяти, верно?
Да.Когда вы назначаете переменные в JavaScript, он просто копирует ссылку.
что случилось со слотом, на который ранее указывал b?
Если что-то еще указывает наэто ничего.Если ничто иное не указывает на него, сборщик мусора в конечном итоге восстановит свою память.
, наконец, функция сохраняется в памяти на этапе создания, но не может быть вызвана, потому что ничто не указывает на нее или еепросто сохранить во время выполнения?
Он сохраняется при его создании.Можно создать функцию, даже не назначая ее переменной - это общая идиома, называемая Выражение немедленного вызова функции :
(function() { console.log("Function is running"); })();
Эта функция создается, вызывается и затем становится недоступной.В конце концов сборщик мусора вернет его.