Пример кода ниже;Управление памятью Javascript в функциях
function a() { var a = 123; //some stuff b(); } function b() { //some stuff } a();
Итак, мой вопрос в том, выполняется ли переменная 'a' в памяти при выполнении b()?
спасибо.
Пример кода ниже;Управление памятью Javascript в функциях
function a() { var a = 123; //some stuff b(); } function b() { //some stuff } a();
Итак, мой вопрос в том, выполняется ли переменная 'a' в памяти при выполнении b()?
спасибо.
Да, это так. Это не в области b()
, но оно находится в памяти.
Вы не можете просто магически удалить объекты с областью a()
. Вы можете вручную самый лучший и самый разумный способ сделать это, называя их один за другим, вместо вложенных вызовов:delete a;
, если вам не нужно будет его больше, но
function a() {
var a = 123;
//some stuff
}
function b() {
//some stuff
}
a();
b();
Если нет быстрый способ сделать это, подумайте о рефакторинге своего кода немного
Это будет как конкретная реализация, так и конкретная программа. Это будет зависеть от конкретной платформы javascript, на которой он работает, таких как размер системной памяти и количество кода/сколько переменных было выделено до того, как был запущен a()
.
Вы не можете полагаться на то, что он был освобожден до или во время b()
, поскольку сбор мусора является недетерминированным.
В большинстве случаев он, вероятно, останется в памяти.
Вы знаете какой-либо способ автоматического выпуска вместо обнуления каждой переменной? – Ozgur
@Ozgur: он должен быть выпущен автоматически в несколько случайной точке после завершения 'a'. Javascript - сборщик мусора, что означает, что если у вас больше нет дескриптора переменной, он в конечном итоге будет очищен. –
Оператор 'delete' действительно не работает для этого случая, как вы рекомендуете. С помощью 'FunctionDeclaration', как' a' в вашем примере, 'delete a;' будет терпеть неудачу, потому что идентификатор привязан к * переменному объекту * как * не подлежащий удалению *, ('{DontDelete}' в ECMAScript 3, или '[[Configurable]] = false'), кроме того, в новом строком режиме ECMAScript 5 Edition, удаление идентификатора (например,' delete a; ') вызовет' SyntaxError', это было сделано из-за большого недоразумения этого оператор ... Больше информации: [Понимание 'delete'] (http://perfectionkills.com/understanding-delete/). – CMS