2016-03-02 2 views
-1

Просто прочитайте материал, в котором «null» в javascript можно использовать в качестве заполнителя. Но затем он перешел к утверждению, что «нуль» также может указывать на то, что определенная переменная готова к очистке. Но как javascript знает, действует ли переменная с нулем в качестве заполнителя, а не «готова к очистке» ... или наоборот?JavaScript null; placeholder vs «готов к очистке»

Любые указатели будут оценены по достоинству.

+0

Было ли это конкретно сказано, что *** Javascript *** считает «null» «готовым к очистке»? Я предполагаю, что это просто означает соглашение для программиста ... – deceze

+0

Что готово для чистки * в любом случае? Доступно для сбора мусора? Это мало смысла, потому что когда переменная привязана к «null», она по определению больше не привязана к коллекционируемому объекту. –

+0

Спекуляция; Также может быть, что когда переменная, которая содержит объект/значение, а затем устанавливает нулевую готовность к GC, а, как если бы null присваивается новой переменной, она находится в режиме состояния. – Daniel

ответ

0

Этот материал немного вводит в заблуждение. Оба правильные, вроде, но это не переменные, которые очищаются; это значения (объекты), которые очищаются.

Когда переменная указывает на то, к примеру, как это:

mango = "Hi there!"; 

Немного памяти выделяется для хранения значения 9 байтов "Hi there!" (примечание: объем памяти, выделенной, как правило, больше, чем 9 байтов. Это не менее 10 байтов, чтобы включить либо нулевой ограничитель, либо количество байтов).

Если затем присвоить значение null ему так:

mango = null; 

Строка "Hi there!" не может быть больше не используется программой, потому что он больше не ссылается на какой-либо переменной (если она не ссылается некоторые другая переменная). Таким образом, он является кандидатом на сбор мусора. Это то, что означает, что что-то готово к очистке.

Резюмируя:

  1. Javascript рассматривает null как значение, которое может быть присвоено переменным. Он не интерпретирует, что означает, что переменная должна быть null.

  2. Человеческий программист может использовать null как значение, которое означает «заполнитель» (примечание: программисты также могут использовать его для обозначения «нет значения», язык не заботится о том, что думают программисты).

  3. Объект/значение, не имеющее переменной, указывающей на него, может быть собрано в мусор.

  4. Установка переменной в null означает, что она больше не указывает на ее предыдущее значение. Это означает, что установка переменных в нуль может использоваться как механизм для освобождения памяти.

+0

Nitpicking, но строки JavaScript были основаны на UNICODE с момента выхода. Итак, '' Hi there! "' Не будет принимать 10 байтов, но 20 байтов в Windows (UCS-2) и * 40 байт * в Linux (UTF-32 с 'wchar_t' шириной в четыре байта). –

+0

@slebetman Ничего себе! Это довольно подробно. Благодарю. – Grateful

+0

@slebetman Просто пытаюсь переварить сообщение, и в результате у меня есть несколько вопросов. Во-первых, вы упомянули, что javascript не интерпретирует, что означает, что переменная имеет значение null, однако затем вы сказали, что установка переменной в null означает, что она больше не указывает на ее предыдущее значение. Следовательно, javascript использует это как механизм для освобождения памяти! Mmmm ... так что он интерпретирует значение null как означающее «готовность к очистке». Это звучит немного непоследовательно для меня. Во-вторых, если программист рассматривает null как замещающий объект, разве это не противоречит javascript, который интерпретирует это как «свободную память сейчас»? – Grateful

Смежные вопросы