• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:javascriptのコードについて)

JavaScriptのコードについて

このQ&Aのポイント
  • JavaScriptのコードでエンクロージャー関数を使用してローカル変数をクロージャーとして保持する方法について説明します。
  • エンクロージャー関数を使用してローカル変数を外部からアクセスできないようにし、getterとsetterメソッドを使用して値の取得と変更を行うことができます。
  • ただし、クロージャーをオブジェクトリテラルとして返す場合、クロージャーの動作は実現されますが、メモリ消費が増える可能性があります。また、この方法は一般的には推奨されていません。

質問者が選んだベストアンサー

  • ベストアンサー
  • b0a0a
  • ベストアンサー率49% (156/313)
回答No.2

別に値を返さないとクロージャじゃないというわけではありませんよ 要は変数を保持する関数がクロージャだと自分は理解しています var getter = function (){ return hoge; } の時点で1つクロージャはできています このクロージャは1つ上のスコープにMethod関数の変数、例えば hoge = "初期値" を持っており、Method関数が終わってもその繋がりを持ち続けているのです ですから関数をreturnするときに何か特別なことが行われているわけでなく、関数そのものが特殊なので、返し方には影響されません また、メモリリーク等通常であれば気にすることはありません そもそもクロージャとは直接関係ありません DOMと循環参照が起きた場合GCによる不要なメモリの回収が困難になるという問題があって、 その処理を書くときにクロージャが便利でよく使われるので、気をつけましょうということであって、クロージャを避けようと受け取ってしまったのなら大変な誤りです それに仮にメモリリークで1回に数KBメモリが消費されたところで、1000回やっても数MBです 非常に長時間動作するWebアプリケーションでないのなら杞憂というものです

その他の回答 (1)

  • notnot
  • ベストアンサー率47% (4900/10358)
回答No.1

>クロージャーって関数内で定義された関数であれば、どういう返り値の返し方でもクロージャーになるのですかね? 返しているオブジェクトの要素が関数ですからね。で、その返された関数を呼び出している。 何の不思議もないと思いますけど。 >これはクロージャーとして生成するたんびに内部の変数を保持するためメモリ食い虫になるらしいのですが 普通の言語だと、オブジェクトの生成に相当しますから、そのオブジェクト用のメモリが確保されます。 解放せずに、生成を繰り返せばどんどん使用メモリは増えるし、適宜オブジェクトを解放すれば(例だと、obj=null; すれば)、メモリも解放されてガベージコレクションされます。 >いけないのでしょうか? 必要ならばすればいいので全く問題ありません。

関連するQ&A