2012-07-27 13 views
6

私の一般的な質問は、リソースがJavascriptでクリーンアップ/リリースされるようにするためにどのようなテクニックを使用できますか?現在、関数内の戻りまたは例外への実行パスをすべて見つけ、クリーンアップを確実にするC(gotoなし)アプローチを採用しています。Javascriptは自動的にリソースを解放します(RAIIなど)

私の具体的な例は次のとおりです。Node.jsでは、オブジェクトメンバー関数でmutexesを使用しています(私は相互排除が必要です。Node.jsアプリケーションの複数のインスタンスを実行し、異なるインスタンスがファイルシステムとやりとりします)。

例えば、C++で、私は、次のような何かをするだろう:

void MyClass::dangerous(void) { 
    MyLock lock(&this->mutex); 
    ... 
    // at the end of this function, lock will be destructed and release this->mutex. 
} 

を私の知る限り、JavaScriptはどのRAII機能を提供しません。 C言語では、エラーが発生した場合に私のリソース割り振りを解き放つために、関数からのリターンパスが1つしかないので、gotoを使用します。

Javascriptで同様の効果を得るにはどのような方法がありますか?

答えて

1

スコープの終了時に呼び出されるコールバックのリストを使用します。必要なときにそれらすべてを呼び出してください。

このアプローチは、たとえばブラウザウィンドウにアタッチされた追加のハンドラを初期化解除するために使用されます。初期化解除コードを含むコールバックは、ウィンドウのアンロードイベントで処理されるリストに格納されます。

このアプローチは例外的な安全要件のためにスコープ管理にはほとんど不向きです。

関連する問題