teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

メモリ開放云々の説明を修正

2015/11/12 19:50

投稿

think49
think49

スコア18194

answer CHANGED
@@ -10,7 +10,8 @@
10
10
  - [変数宣言のvarアリとナシの違いや使い分け(14790)|teratail](https://teratail.com/questions/14790#r23126)
11
11
 
12
12
  **クロージャがメモリ開放しないのは仕様**
13
- そもそも論としてクロージャがメモリを手放さないのは内包関数がローカル変数にスコープを持っているからであり、仕様です(メモリリークではありせん)
13
+ そもそも論としてクロージャがメモリを手放さないのは内包関数がローカル変数にスコープを持っているからであり、スコプを持つ変数をガベージコレション回収できない事に起因し
14
+ つまり、仕様であってメモリリークではありません。
14
15
 
15
16
  **ガベージコレクション**
16
17
  メモリ開放が必要なら[ガベージコレクション](https://ja.wikipedia.org/wiki/%E3%82%AC%E3%83%99%E3%83%BC%E3%82%B8%E3%82%B3%E3%83%AC%E3%82%AF%E3%82%B7%E3%83%A7%E3%83%B3)によって開放されるようにスコープを調節してください。

1

markdown記法の調整

2015/11/12 19:50

投稿

think49
think49

スコア18194

answer CHANGED
@@ -1,16 +1,18 @@
1
1
  > varのつく変数はDontDelete属性がつくため、delete演算子で解放できませんが、上記の例でvarをつけずに、...(中略)...とするのはありですか?
2
2
 
3
- グローバル変数を使うと内包関数が参照する変数 `x` が共有されてしまいます。
3
+ グローバル変数を使うと内包関数が参照する「グローバル変数 `x`が共有されてしまいます。
4
4
  クロージャの優位性を失うことになると思うのですが、それはクロージャにする意味があるのでしょうか。
5
5
  また、その例では [Strict Mode](https://developer.mozilla.org/ja/docs/Web/JavaScript/Strict_mode) で `ReferenceError` になります。
6
6
  ---
7
7
 
8
8
  **DontDelete 属性が存在するのは ES3 まで**
9
- また、`DontDelete` 属性が存在するのは ES3 までであり、ES5 では削除されています。
9
+ `DontDelete` 属性が存在するのは ES3 までであり、ES5 では削除されています。
10
10
  - [変数宣言のvarアリとナシの違いや使い分け(14790)|teratail](https://teratail.com/questions/14790#r23126)
11
11
 
12
12
  **クロージャがメモリ開放しないのは仕様**
13
13
  そもそも論としてクロージャがメモリを手放さないのは内包関数がローカル変数にスコープを持っているからであり、仕様です(メモリリークではありません)。
14
+
15
+ **ガベージコレクション**
14
16
  メモリ開放が必要なら[ガベージコレクション](https://ja.wikipedia.org/wiki/%E3%82%AC%E3%83%99%E3%83%BC%E3%82%B8%E3%82%B3%E3%83%AC%E3%82%AF%E3%82%B7%E3%83%A7%E3%83%B3)によって開放されるようにスコープを調節してください。
15
17
  ガベージコレクションは「対象がどこからも参照されなくなった時」に自動的にメモリを開放します。
16
18