JavaScript の static 変数

Harshit Jindal 2023年10月12日
  1. JavaScript で関数のプロパティを使用して static 変数を作成する
  2. JavaScript で IIFE(即時呼び出し関数式)を使用して static 変数を作成する
  3. JavaScript で arguments.callee を使用して static 変数を作成する
  4. JavaScript でコンストラクターを使用して static 変数を作成する
JavaScript の static 変数

このチュートリアルでは、JavaScript で static 変数を作成する方法を紹介します。static 変数は、関数呼び出し間で値を維持する変数であり、通常は関数で使用されます。static キーワードは、クラスの静的プロパティまたはメソッドを定義するのに役立ちます。

JavaScript で関数のプロパティを使用して static 変数を作成する

JavaScript の関数はオブジェクトであり、プロパティを持つことができます。したがって、関数のプロパティを宣言することで static 変数を作成できます。これらはグローバル変数のように値を維持し、関数の外部で変更することはできないため、グローバル変数よりもはるかに整理されています。

function getId() {
  if (typeof getId.counter == 'undefined') {
    getId.counter = 0;
  }
  alert(++getId.counter);
}

上記の関数を複数回呼び出すと、カウンターの値が増加し、グローバル変数がすべての混乱を停止するように、関数の外部からアクセスすることはできません。

JavaScript で IIFE(即時呼び出し関数式)を使用して static 変数を作成する

IIFE は、定義されるとすぐに実行される関数です。これは 2つの部分で構成されています。

  1. グループ化演算子 () で囲まれた字句スコープを持つ無名関数。
  2. JavaScript によって直接解釈される関数式。
var incr = (function() {
  var i = 1;
  return function() {
    return i++;
  }
})();
incr();  // returns 1
incr();  // returns 2

関数が呼び出されるたびに、カウンターi が 1つ増えます。i は、クラス内の一般的な static 変数と同様に、関数のプロパティであるため、外部からはアクセスできません。

JavaScript で arguments.callee を使用して static 変数を作成する

arguments.callee を使用して static 変数を JavaScript に格納できます。これは現在実行されている関数を参照し、関数オブジェクトの場合と同じようにプロパティを直接アタッチできます。

function() {
  arguments.callee.myStaticVar = arguments.callee.myStaticVar || 1;
  arguments.callee.myStaticVar++;
  alert(arguments.callee.myStaticVar);
}

このメソッドはメソッド 1 と非常によく似ていますが、プロパティを直接アタッチする代わりに、arguments.callee を使用して現在実行中の関数にプロパティを追加している点が異なります。

JavaScript でコンストラクターを使用して static 変数を作成する

このメソッドは、C++/Java/C++ のような強く型付けされたオブジェクト指向言語と同等のバージョンです。すべてのインスタンスではなく、型全体に変数を割り当てようとします。

function delftClass() {
  var privateVariable = 'foo';
  this.publicVariable = 'bar';
  this.privilegedMethod = function() {
    alert(privateVariable);
  };
}
delftClass.prototype.publicMethod = function() {
  alert(this.publicVariable);
};

delftClass.staticProperty = 'baz';
var myInstance = new delftClass();

ここでは、構築関数 delftClass を作成してから、作成されたインスタンスとは関係のない静的プロパティを割り当てます。JavaScript は関数をオブジェクトとして扱うため、オブジェクトであるため、関数にプロパティを割り当てることができます。すべてのインスタンスが static 変数を共有します。

著者: Harshit Jindal
Harshit Jindal avatar Harshit Jindal avatar

Harshit Jindal has done his Bachelors in Computer Science Engineering(2021) from DTU. He has always been a problem solver and now turned that into his profession. Currently working at M365 Cloud Security team(Torus) on Cloud Security Services and Datacenter Buildout Automation.

LinkedIn

関連記事 - JavaScript Variable