Лучше подходить обнулять переменные, объекты в Javascript

javascript javascript-objects dom-events function-literal

2247 просмотра

1 ответ

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

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

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" />
Автор: devjs11 Источник Размещён: 06.07.2019 01:05

Ответы (1)


2 плюса

Решение

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

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

Для того, чтобы избавиться от всего appв # 1, вы должны будете делать delete window.appили app = nullв окне содержит ссылку на него.

Автор: Matt Размещён: 29.11.2011 12:15
Вопросы из категории :
32x32