27.05.2012, 01:47
|
Аспирант
|
|
Регистрация: 10.04.2010
Сообщений: 92
|
|
Что занимает меньше памяти, null или undefined?
У меня есть перменная:
var one = "one";
Она свое отработала, я хочу ее "удалить", "обнулить", в общем очистить как-то память, которую она занимала. Как это правильно сделать?
one = null; // присвоить null?
one = undefined; // или присвоить undefined?
Или может есть какая-то специальная для этого функция типа как unset в php?
Автоматический сборщик мусора в данном случае не годится, мне нужно специально ее удалить.
|
|
27.05.2012, 02:09
|
Аспирант
|
|
Регистрация: 10.04.2010
Сообщений: 92
|
|
Сообщение от nasqad
|
delete one;
//равнозначно
one = undefined;
|
Я тоже думал, что undefined - это правильнее, чем null. Но смотрите, что тут в учебнике написано:
undefined — специальное значение, которое, как и null, образует свой собственный тип. Оно имеет смысл «значение не присвоено».
Если переменная объявлена, но в неё ничего не записано, то ее значение как раз и есть undefined.
Т.е. выходит, что если переменная == undefined, то она объявлена. А если она объявлена, хоть ей и ничего не присвоено, место в памяти она уже какое-то занимает. А вот хотелось бы удалить, чтобы даже память не занимала.
|
|
27.05.2012, 09:55
|
Новичок на форуме
|
|
Регистрация: 19.02.2008
Сообщений: 9,177
|
|
Сообщение от jsuse
|
Что занимает меньше памяти, null или undefined?
|
facepalm.jpg
В JS есть GarbageCollector, он именно для того и создан, чтобы не думать об освобождении памяти.
|
|
27.05.2012, 13:40
|
|
''
|
|
Регистрация: 11.12.2011
Сообщений: 636
|
|
Сообщение от nasqad
|
delete one;
//равнозначно
one = undefined;
|
Равнозначно? Хм, это ещё вопрос.
tst = {a : 'string'}
alert('a' in tst);
tst.a = undefined;
alert('a' in tst);
tst = {a : 'string'}
alert('a' in tst);
delete tst.a;
alert('a' in tst);
|
|
27.05.2012, 14:44
|
sinistral
|
|
Регистрация: 28.03.2011
Сообщений: 5,418
|
|
Сообщение от jsuse
|
У меня есть перменная:
var one = "one";
Она свое отработала, я хочу ее "удалить", "обнулить", в общем очистить как-то память, которую она занимала. Как это правильно сделать?
one = null; // присвоить null?
one = undefined; // или присвоить undefined?
Или может есть какая-то специальная для этого функция типа как unset в php?
Автоматический сборщик мусора в данном случае не годится, мне нужно специально ее удалить.
|
чтобы не было таких вопросов, разбивайте задачу на подзадачи. подзадача - функция, что-то делающая и возвращающая результат. все другие переменные хаваются сборщиком мусора
т.е. :
var long_life; // это будет жить.
function count(a) {
var b = 5, c = 2.4, d = Math.PI; // это - еда.
return d * c + b * a;
}
set_life = function() {
long_life = count(Mah.random());
};
Сообщение от Раед
|
Равнозначно? Хм, это ещё вопрос.
|
и ещё один :
(function(){
var a = "test";
delete a;
alert(a);
})();
Последний раз редактировалось melky, 27.05.2012 в 14:50.
|
|
27.05.2012, 15:06
|
|
''
|
|
Регистрация: 11.12.2011
Сообщений: 636
|
|
Сообщение от melky
|
и ещё один :
|
Ну дык переменная var'ом объявлена => не удаляется.
И не обязательно было её в функцию оборачивать.
|
|
27.05.2012, 15:40
|
Аспирант
|
|
Регистрация: 10.04.2010
Сообщений: 92
|
|
Сообщение от Kolyaj
|
facepalm.jpg
В JS есть GarbageCollector, он именно для того и создан, чтобы не думать об освобождении памяти.
|
Умник нашелся. Вася, не позорся.
|
|
27.05.2012, 18:44
|
sinistral
|
|
Регистрация: 28.03.2011
Сообщений: 5,418
|
|
Сообщение от Раед
|
И не обязательно было её в функцию оборачивать.
|
var a = "1234";
alert( a + " === "+ window.a);
delete window.a;
alert(window.a);
|
|
27.05.2012, 19:01
|
|
''
|
|
Регистрация: 11.12.2011
Сообщений: 636
|
|
var a=5;
alert(a);
delete a;
alert(a);
Я не говорил, что её нельзя удалить как свойство window. Я говорил, что её нельзя удалить как переменную.
|
|
27.05.2012, 20:12
|
sinistral
|
|
Регистрация: 28.03.2011
Сообщений: 5,418
|
|
Сообщение от Раед
|
var a=5;
alert(a);
delete a;
alert(a);
Я не говорил, что её нельзя удалить как свойство window. Я говорил, что её нельзя удалить как переменную.
|
для этого я и обернул в функцию, чтобы переменная не была свойством window.
|
|
|
|