Показать сообщение отдельно
  #12 (permalink)  
Старый 23.07.2012, 20:55
Аватар для x-yuri
Отправить личное сообщение для x-yuri Посмотреть профиль Найти все сообщения от x-yuri
 
Регистрация: 27.12.2008
Сообщений: 4,201

1) Есть ссылочные типы, и есть примитивные. Если в переменной содержится значение примитивного типа, значит в ней хранится само значение. В случае со значениями ссылочного типа в переменных хранятся ссылки на значение, т.е. сами данные хранятся отдельно.

Например, массив - ссылочный тип.

var a = [1, 2, 3];   // создали массив и записали ссылку на него в переменную a
var a = [];   // создали пустой массив и записали ссылку на него в переменную a
// старый массив никуда не исчез, просто на него сейчас нету ни одной ссылки


В результате, передавая переменные ссылочного типа в функции, ты можешь их изменить в отличие от примитивных типов:
var a = 1, b = [2, 3, 4];
function f(c, d) {
    c = 2;   // a не изменилась
    d.splice(0, 1);   // b изменилась
}
f(a, b);
alert([a].concat(b));


Примитивные типы - числа и true/false, по поводу строк - неизвестно, потому что их нельзя изменить. Остальное ссылочные типы. Number и Boolean - тоже ссылочные типы, потому что это объекты.

2) Сборщик мусора это такая штука, которая время от времени запускается и освобождает память, занятую переменными, которые нигде не используются.
var a = [1, 2, 3];   // создали массив и записали ссылку на него в переменную a
var a = [];   // создали пустой массив и записали ссылку на него в переменную a
// старый массив никуда не исчез, просто на него сейчас нету ни одной ссылки
// через какое-то время сборщик мусора освободит память, занятую массивом [1, 2, 3], другими словами старый массив "исчезнет"



Сообщение от 9xakep
devote,
Ну это тогда уже от задачи, мне может и надо очистить один массив
Следовательно, a = [] не очищает массив.

Сообщение от Deff
Ксать забавно - можно даже избегая замыканий иметь кучу переменных
не видимых в глобале
Именно поэтому рекомендуется создавать все переменные с помощью var. Если вы видите в коде переменные, объявленные без var, значит либо 1) автор очень умный, либо 2) автор очень "умный"
Ответить с цитированием