1

私はモバイル用に何かを構築していますが、どうにかしてnullオブジェクト、変数をクリアしてメモリを少し解放したいと考えています。ここに 2 つの簡単な例があります。どちらも私が信じているように匿名関数ですが、どの方法がより適切またはより有効なアプローチですか? 全部間違ってたらごめんなさい。私にはどちらも同じことをしているように見えますが、必要になるまでオブジェクトが作成されないため、最初のものの方が好きです。2 番目のバージョンでは、変数やオブジェクトなどを作成するためのコードがすぐに実行されますが、必要になるまでメインのビルド機能は実行されません。

どの方法がより一般的かを理解しようとしています。私のような初心者は、無名関数の使用法をほとんど誤解していることを知っています。

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" />
4

1 に答える 1

2

リソースの解放について心配する必要はありません。JavaScript にはガベージ コレクターがあり、スコープ外にある変数をピックアップして破棄します。delete obj.yourReferenceなどを使用して不要なオブジェクトへの参照を削除reference = nullし、残りはガベージ コレクターに任せます。

定義を削除すると、 #1 がaand変数自体を自動的に再利用することがわかります。そうしない限り、両方とも、残している関数によって作成されたクロージャーに囲まれているため、ガベージコレクターがそれを行うのを止めています。bapp.cleanup()abcleanup

app#1で全体を取り除くには、delete window.appまたはapp = nullwindowがそれへの参照を保持する必要があります。

于 2011-11-29T12:15:22.927 に答える