2015-07-24 3 views
1

Я хочу узнать о большей разнице между глобальной переменной и локальной переменной в javascript. Я слышал одного из моих друзей, что глобальная переменная всегда хранится в памяти даже при выполнении функции. Но локальная переменная хранится в памяти, когда функция запускает выполнение и удаляется из памяти после ее выполнения.Потребление глобальной переменной и локальной переменной памяти javascript

Если это так, как я могу проверить потребление памяти функцией.

+0

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statement/var – epascarello

+0

в общем, вам не нужно беспокоиться о потреблении памяти JS, если не появляются симптомы с низким уровнем осколка, что редко встречается у нас ll-написанный JS. как правило, проблемы с ОЗУ вызваны ошибками кодирования или анти-шаблонами или иногда чрезмерным кэшированием. в JS другие проблемы с бараном гораздо реже, чем программы на C, написанные кем-то из того же уровня опыта. – dandavis

ответ

4

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

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

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

function foo(x) { 
    var result = x * 2; 
    return result; 
} 

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

function makeCounter() { 
    var n = 0; 

    function count() { 
     return n++; 
    } 

    return count; 
} 

Пример использования:

var c = makeCounter(); 
console.log(c()); // 0 
console.log(c()); // 1 
console.log(c()); // 2 

В этом случае, поскольку counter возвращает ссылку на функцию, а функция (count) имеет ссылку на контекст, где n был создан, n не утилизирован, пока count существует. count называется закрытием (он «закрывает» контекст вызова makeCounter).

Подробнее: