ここは、ふぇりあ16歳が不定期に連載しているオンライン小説のページです。

VNIふぇりあ16歳へ


ゼロからわかる現代JavaScript

19.グローバル変数とローカル変数、各種スコープ

さて、変数はなんだかいつの間にか使っていたので
分かると思います。

しかし実はみな同じように見えても、変数には種類があります。

それは

・グローバル変数

全体からアクセスでき、一時的な記憶フィールドとして使えます

・ローカル変数

メソッドの中でしか使用できず、メソッドが実行されたらデータが失われます。

・クラス変数(メンバ変数)

基本はクラスの中からアクセスし、オブジェクトを作ればいろいろなところから呼び出せます。
一時的な記憶フィ−ルドとして使用できます。

よりオブジェクト指向らしい使い方はプロパティを使い、外部からクラス変数を
操作する方法です。

今回使用するソースコード
//グローバル変数
var global_var = "どこでも呼び出せるよ";

local();

//aとここで書いても呼び出せない(ローカル変数)

//クラス変数呼び出し
mc = new Myclass();
mc.scope();

//プロパティの使用
mc.setclass("変数obj.classに新しい値を設定するよ");

//オブジェクトをメソッドに送る
MCsend(mc);

function local() {
  var a = "変数aはメソッド内のみ";
  document.write(a);

  document.write("<br>変数global_varは" + global_var + "<br>");
}

function Myclass() {
  var obj = this;
  obj.class = "変数obj.classはまずクラス内メソッドから呼び出すよ<br>";

  obj.scope = function () {
    document.write(obj.class);
  }

  //プロパティ
  obj.getclass = function () {
    return obj.class;
  }

  obj.setclass = function (x) {
    obj.class = x;
  }
}

function MCsend(x) {
  //送られたオブジェクトmcのメソッドを実行している
  x.scope();
}

またオブジェクトをメソッドに送ることもできます。

その時は、そのオブジェクトを引数にとり

引数.メソッド()

と実行できます。ややこしいですね。

さらに、メソッドのほとんどはグローバルメソッドとして実行できますが、

クラスのメソッドscopeはオブジェクトが無いと呼び出せないことも分かると思います。

実行結果

コラム;

JavaScriptのスコープは他の言語に比べてゆるいです。
そのためソースが煩雑になりやすくなりますので、
上手な人のソースをみてオブジェクト指向らしい方法で組むと
すっきり見やすく書けると思います。

(C)著作権はふぇりあ16歳とお兄ちゃんにあります。
無断転載、盗用は禁止です。