トップページ > コンテンツ > プログラミング入門 > Ajax入門 > JavaScript入門 > Javascript基本 > 変数の宣言方法

変数の種類

記述 種別 意味合い
let(※1) 局所変数 let (変数 = 値) {}のブロック内でのみ変数が有効となる
const(※2) 定数 変数識別子への再代入をできないようにする。配列やオブジェクトは変更できるため、不変という意味ではない。
var(※3) ローカル変数とグローバル変数 通常の変数宣言だが、letが登場してからはスコープ範囲を制限する観点で使う機会が減少した

(※1)<script type="text/javascript; version=1.7"></script>のようにバージョンを明記が必要。

(※2)constとすると定数を書ける。ただし、ECMAScript6で決まった仕様なので使用できるブラウザに制限がある模様。

(※)関数内でvarをつけた場合はローカル変数。
  関数外でvarをつけた場合はグローバル変数として扱われる。
var hoge; //グローバル変数(=window.hoge)
function sample() {
  var hoge; //ローカル変数(=sample.hoge)
}

Activation(Call)オブジェクト

関数のコールが発生した時に生成されるオブジェクト。プログラマ側からアクセスは出来ない。
function sample(){
 var test = "hoge";
}
から以下のオブジェクトが生成される。
sample = {
  test:'hoge', //変数オブジェクト
  arguments:, //<-argumentsオブジェクト。関数の呼び出し元から渡された変数を格納(配列ではないが、Array.prototype.slice.call(arguments);で変換可能。
              //                         callee:関数自身、caller:関数呼び出し元,length:引数の長さ等を持つ。
  this:
}

スコープチェーン

基本的に変数は内側から優先されて、評価される。
with句(非推奨)➡内側のcallオブジェクト➡外側のcallオブジェクト(*1)➡グローバルオブジェクト(windowオブジェクト)
var hoge = "hoge";
function test() {
   var hoge = "test"; //sample関数スコープでhoge変数を宣言しなかった場合は、test関数のスコープが参照される。
                      //function sampleの部分をxxx.onclick = function() {}のようにした場合は(*2)参照。
   function sample() {
     var hoge ="sample"; //sample関数スコープで宣言したhoge変数("sample")の方が優先度高い。
   }
}
(*1)内側のcallオブジェクトのargumentsから外側のcallオブジェクトを辿るので、まるでチェーンのようだ…という意味。
(*2)スコープ参照の注意

最終更新:2020年09月05日 12:55