Лучше подходить обнулять переменные, объекты в Javascript - PullRequest
1 голос
/ 29 ноября 2011

Я создаю что-то для мобильных устройств и хотел бы как-то очистить нулевые объекты, переменные, чтобы освободить немного памяти. Здесь у меня есть два быстрых примера, оба, как я полагаю, являются анонимными функциями, но какой путь лучше или более правильный подход? Извините, если я все понял неправильно. Мне обоим кажется, что они делают одно и то же, хотя мне больше нравится первый, поскольку объекты не будут создаваться, пока они мне не понадобятся. Вторая версия будет немедленно выполнять код для создания переменных, объектов и т. Д., Но не будет выполнять основную функцию сборки, пока она мне не понадобится.

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

V1

var app = function() {

        //create variables, objects
        var a = 'Data 1';
        var b = 'Data 2';

        //do some things    
        console.log(a + ', ' + b);

        //do a cleanup
        app.cleanup = function() {

            a = null;
            b = null;
            console.log(a, b);

        }
    }
    setTimeout(app, 200);

V2

var app = {};

    (function(){

        //create variables, objects
        var a = 'Data 1';
        var b = 'Data 2';

        app.build = function(){                 

            //do some things
            console.log(a + ', ' + b);          

        }

        //do a cleanup
        app.cleanup = function(){

            a = null;
            b = null;
            console.log(a, b);

        }   

        setTimeout(app.build,200);

    })();

Позже в html или событии

<input type="button" onclick="app.cleanup()" value="clean" />

1 Ответ

2 голосов
/ 29 ноября 2011

Вам не стоит беспокоиться об освобождении ресурсов.В JavaScript есть сборщик мусора, который будет подбирать переменные, которые выпадают из области видимости, и уничтожать их.Удалите ссылку на объект, когда он вам не нужен, с помощью delete obj.yourReference, reference = null или чего-то подобного, и пусть сборщик мусора сделает все остальное.

Вы обнаружите, что # 1 автоматически восстановит переменные a и b автоматически, если вы удалите определение app.cleanup().Если вы этого не сделаете, a и b оба будут заключены в замыкание, созданное функцией cleanup, которую вы оставляете позади, поэтому вы не позволяете сборщику мусора делать свое дело.Чтобы избавиться от всего app в # 1, вам нужно будет сделать delete window.app или app = null, поскольку окно содержит ссылку на него.

...