Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 27.05.2012, 01:47
Аспирант
Отправить личное сообщение для jsuse Посмотреть профиль Найти все сообщения от jsuse
 
Регистрация: 10.04.2010
Сообщений: 92

Что занимает меньше памяти, null или undefined?
У меня есть перменная:
var one = "one";

Она свое отработала, я хочу ее "удалить", "обнулить", в общем очистить как-то память, которую она занимала. Как это правильно сделать?
one = null;   // присвоить null?
one = undefined;  // или присвоить undefined?

Или может есть какая-то специальная для этого функция типа как unset в php?

Автоматический сборщик мусора в данном случае не годится, мне нужно специально ее удалить.
Ответить с цитированием
  #2 (permalink)  
Старый 27.05.2012, 02:09
Аспирант
Отправить личное сообщение для jsuse Посмотреть профиль Найти все сообщения от jsuse
 
Регистрация: 10.04.2010
Сообщений: 92

Сообщение от nasqad Посмотреть сообщение
delete one;
//равнозначно
one = undefined;
Я тоже думал, что undefined - это правильнее, чем null. Но смотрите, что тут в учебнике написано:
undefined — специальное значение, которое, как и null, образует свой собственный тип. Оно имеет смысл «значение не присвоено».
Если переменная объявлена, но в неё ничего не записано, то ее значение как раз и есть undefined.

Т.е. выходит, что если переменная == undefined, то она объявлена. А если она объявлена, хоть ей и ничего не присвоено, место в памяти она уже какое-то занимает. А вот хотелось бы удалить, чтобы даже память не занимала.
Ответить с цитированием
  #3 (permalink)  
Старый 27.05.2012, 09:55
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Сообщение от jsuse
Что занимает меньше памяти, null или undefined?
facepalm.jpg


В JS есть GarbageCollector, он именно для того и создан, чтобы не думать об освобождении памяти.
Ответить с цитированием
  #4 (permalink)  
Старый 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);
Ответить с цитированием
  #5 (permalink)  
Старый 27.05.2012, 14:44
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 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.
Ответить с цитированием
  #6 (permalink)  
Старый 27.05.2012, 15:06
Аватар для Раед
''
Отправить личное сообщение для Раед Посмотреть профиль Найти все сообщения от Раед
 
Регистрация: 11.12.2011
Сообщений: 636

Сообщение от melky
и ещё один :
Ну дык переменная var'ом объявлена => не удаляется.
И не обязательно было её в функцию оборачивать.
Ответить с цитированием
  #7 (permalink)  
Старый 27.05.2012, 15:40
Аспирант
Отправить личное сообщение для jsuse Посмотреть профиль Найти все сообщения от jsuse
 
Регистрация: 10.04.2010
Сообщений: 92

Сообщение от Kolyaj Посмотреть сообщение
facepalm.jpg
В JS есть GarbageCollector, он именно для того и создан, чтобы не думать об освобождении памяти.
Умник нашелся. Вася, не позорся.
Ответить с цитированием
  #8 (permalink)  
Старый 27.05.2012, 18:44
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 28.03.2011
Сообщений: 5,418

Сообщение от Раед
И не обязательно было её в функцию оборачивать.
var a = "1234";
alert( a + " === "+ window.a);
delete window.a;
alert(window.a);
Ответить с цитированием
  #9 (permalink)  
Старый 27.05.2012, 19:01
Аватар для Раед
''
Отправить личное сообщение для Раед Посмотреть профиль Найти все сообщения от Раед
 
Регистрация: 11.12.2011
Сообщений: 636

var a=5;
alert(a);
delete a;
alert(a);

Я не говорил, что её нельзя удалить как свойство window. Я говорил, что её нельзя удалить как переменную.
Ответить с цитированием
  #10 (permalink)  
Старый 27.05.2012, 20:12
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 28.03.2011
Сообщений: 5,418

Сообщение от Раед Посмотреть сообщение
var a=5;
alert(a);
delete a;
alert(a);

Я не говорил, что её нельзя удалить как свойство window. Я говорил, что её нельзя удалить как переменную.
для этого я и обернул в функцию, чтобы переменная не была свойством window.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Что лучше: библиотека или чистый JS? `p r o x y Библиотеки/Тулкиты/Фреймворки 4 26.11.2010 11:16
Стоит ли учить JS? Или что то другое? aleks_valery Элементы интерфейса 1 06.08.2010 19:33
Что лучше self.open или window.open ? и почему? alb Events/DOM/Window 3 28.07.2010 20:53
Что лучше, display или visibility? FirstFrost Общие вопросы Javascript 1 21.07.2010 05:42
Что такое document.body is null xela1980 jQuery 1 26.12.2009 00:30