JavaScriptにおけるメモリ割り当ての仕組みとガベージコレクション
プログラミング言語を問わず、メモリのライフサイクルはほぼ共通しており、次の3つの段階で構成されます。
- 必要なメモリを割り当てる(アロケーション)
- 割り当てられたメモリを使用する(読み書き)
- 不要になったメモリを解放する
言語による違い:明示的か暗黙的か
このうち2番目の「メモリの使用」は、すべての言語において開発者が明示的に行う必要があります。
一方、1番目の「割り当て」と3番目の「解放」については、C言語のような低レベル言語では明示的に記述する必要がありますが、JavaScriptのような高レベル言語では主に暗黙的に処理されます。
JavaScriptでは明示的なメモリ管理ができない
そのため、JavaScriptにはメモリを明示的に割り当てたり解放したりする構文は存在しません。オブジェクトを初期化した時点で自動的にメモリが割り当てられ、変数がスコープ外になると、ガベージコレクタによって自動的にメモリが解放されます(そのオブジェクトが占有していたメモリが回収される仕組みです)。
コード例
function test() {
// メモリの割り当てと使用
let x = {
name: "John",
age: 24
}
console.log(x);
return null;
// メソッドがスコープ外に出た瞬間に
// ガベージコレクションが実行され、メモリが解放される
}
test();コメントに示したライフサイクルは、関数が呼び出されるたびに毎回実行されます。このように、開発者はメモリ管理を意識せずにコードを書くことができますが、意図せず参照を残し続けるとメモリリークにつながるため、スコープや参照の管理は依然として重要です。
-
JavaScriptで配列をreduceする方法|reduce()メソッドで配列要素を合計する
JavaScriptのreduce()メソッドは、配列の各要素を先頭から順に処理し、その結果を1つの値にまとめる(畳み込む)ための配列メソッドです。数値の合計を求めるだけでなく、配列からオブジェクトを組み立てたり、条件に応じてデータを集約したりと、幅広い場面で活用されています。reduce()メソッドの基本構文 { return 戻り値; }, 初期値);accumulator(アキュムレータ):直前のコールバック関数が返した値(累積値)。最初のループでは初期値、または配列の第1要素が代入されます。currentValue:現在処理している配列の要素。初期値:累積値の出発点となる値。省略し
-
JavaScriptでプロパティにアクセスする3つの方法|ドット記法・角括弧・分割代入の使い分け
JavaScriptでオブジェクトのプロパティにアクセスする3つの方法 JavaScriptには、オブジェクトが持つプロパティ(キーと値のペア)を参照するための方法が主に3つあります。どれも同じ値を取得できますが、それぞれ特徴や向いている場面が異なるため、正しく使い分けられるとコードの可読性と保守性が大きく向上します。 ドット記法:object.property 角括弧記法:object[property] 分割代入:let {property} = object 1. ドット記法(object.property) 最もシンプルで読みやすい記法です。obj.a のようにピリオドでつなぐだけ