変数を宣言する

JavaScript で変数を利用するには最初に変数の宣言を行う必要があります。ここでは JavaScript で変数を宣言する方法について解説します。

(Last modified: )

変数の宣言方法

以前は変数の宣言を行うときに var を使用していましたが、 ECMAScript 2015 (ES6) 以降では var に加えて let と const を使用することができるようになりました。よって変数の宣言は次のいずれかを使用します。

var 変数名;
let 変数名;
const 変数名=初期値;

変数の宣言に使われる 3 つのキーワードの中で const は変数の宣言時に必ず初期値を設定する必要があり、またあとから別の値を代入することができません。そのため、変数を定数のように利用する場合に使われます。 const については「JavaScriptで定数(再代入できない変数)を宣言する」にて解説します。

例えば次のように記述することができます。

var height;
let width;

let と var の違いについてはこのページの最後で解説します。通常は let を使っておけば問題ありません。

複数の変数をまとめて宣言することもできます。その場合はカンマ(,)で区切って変数名を記述してください。

var 変数名1, 変数2, ...;
let 変数名1, 変数2, ...;

例えば次のように記述することができます。

let width, height;

これは次のように記述した場合と同じです。

let width;
let height;

なお変数名に使用できる文字などについては「変数名のルールとよく使われる命名記法」で解説しています。

変数の宣言を省略した場合

変数の宣言を行わずに変数を利用した場合、エラーになる場合とならない場合があります。

変数宣言を行っていない変数の値を参照するとエラーが発生します。次の例では変数宣言を行っていない変数 weight の値を参照しようとしています。

console.log(weight);
>> Uncaught ReferenceError: weight is not defined

変数宣言を行っていな変数に対して値を格納した場合はエラーが発生しません。変数宣言が行われていない変数に値を格納した場合は、グローバルスコープの変数として宣言したとみなされるためです。

weight = 72;
console.log(weight);
>> 72

ただし strict モードの場合は変数宣言を行っていない変数に対して値を格納するとエラーとなります。( strict モードとは今回のようにエラーではないがあまり推奨できない記述方法をエラーとなるようにしたモードのことです)。

"use strict";
weight = 72;
>> Uncaught ReferenceError: weight is not defined

このように必ずしも変数宣言が必要なわけではありませんが、変数宣言を行ったり行わなかったりするのはコードを分かりにくく不具合を発生させる要因にもなりますので、使用する変数は必ず宣言されておくことをおすすめします。

letおよびconstとvarの違い

変数の宣言には長い間 var が使用されてきましたが、 ECMAScript 2015 (ES6) であらたに let と const が利用できるようになりました。この 3 つの違いについて簡単にご紹介します。

再宣言の禁止

var を使って変数の宣言を行った場合、もう一度同じ変数を宣言してもエラーにはなりませんでした。

var num;
num = 10;

var num;

let または const を使って変数の宣言を行った場合、同じ変数名で宣言をもう一度行うとエラーが発生します。

let num;
num = 10;

let num;
>> Uncaught SyntaxError: Identifier 'num' has already been declared

スコープの違い

var を使って変数の宣言を行った場合、変数のスコープは関数スコープとなります。つまり関数内で宣言した変数は関数のいずれの場所でも参照することができます。

次の例をみてください。 変数 msd は if 文のブロックの中で宣言された変数ですが、 var を使って宣言された変数のスコープは関数ですので、同じ関数内であればどこでも参照することができます。

function test(num){
  if (num >= 20){
    var msg = '成人です';
  }else{
    var msg = '未成年です';
  }

  console.log(msg); // 同じ関数内で参照している
}

test(10);
>> 未成年です

それに対して let または const を使って変数の宣言を行った場合、変数のスコープはブロックスコープとなります。つまりブロック内で宣言した変数はブロック内のいずれの場所でも参照することができます。

次の例をみてください。 変数 msd は if 文のブロックの中で宣言された変数です。 let を使って宣言された変数のスコープはブロックですので、同じ関数内であってもブロックの外から参照するとエラーとなります。

function test(num){
  if (num >= 20){
    let msg = '成人です';
  }else{
    let msg = '未成年です';
  }

  console.log(msg); // 変数が宣言されたブロックの外で参照している
}

test(10);
>> Uncaught ReferenceError: msg is not defined

変数の宣言とスコープについては別のページでもう少し詳しく解説します。

-- --

JavaScript で変数を宣言する方法について解説しました。

( Written by Tatsuo Ikura )

Profile
profile_img

著者 / TATSUO IKURA

プログラミングや開発環境構築の解説サイトを運営しています。