Каково время жизни переменной в JavaScript, объявленном с "var". Я уверен, это определенно не согласно ожиданию.
<script>
function(){
var a;
var fun=function(){
// a is accessed and modified
}
}();
</script>
Здесь, как и когда делает JavaScript, собирают "мусор" переменная a
? С тех пор a
часть закрытия внутренней функции, оно идеально никогда не должно собираться "мусор", начиная с внутренней функции fun
, может быть передан как ссылка на внешний контекст. Так fun
должен все еще смочь получить доступ a
от внешнего контекста.
Если мое понимание корректно, как сборка "мусора" происходит затем, и как это удостоверяется, чтобы иметь достаточно пространства памяти, начиная с хранения всех переменных в памяти, пока осуществление программы не могло бы быть надежным?
Спецификация ECMAScript не определяет, как должен работать сборщик мусора, а только говорит, что если идентификатор доступен (через прямой указатель или замыкание), он не должен собираться в сборщик мусора.
Прочтите эту статью о разрешении идентификаторов, замыканиях, цепочке областей видимости и сборке мусора в ECMAScript.
Надеюсь, это поможет
'a' не будет собираться мусором, пока есть внешние ссылки на 'fun'. Браузер проверяет, достаточно ли памяти, запрашивая больше памяти у ОС.