変数のスコープについて[ローカル変数][グローバル変数]

2017年1月3日

変数には、その変数を呼び出すことのできる範囲が存在します。その範囲のことを、スコープ(有効範囲)と呼び、変数はそのスコープの概念によって「ローカル変数」と「グローバル変数」とに分かれます。

 

変数が、ローカル変数かグローバル変数のどちらになるのかは、基本的に、変数を宣言する位置、もしくはその宣言方法(varによる宣言か)によって決まってきます。

 

スポンサーリンク

 

 

まず変数を宣言する位置による違いから説明します。

 

 

上記の例では3行目と6行目において、var による宣言によって、同じtitleという名前の変数が宣言されています。

 

関数の外で宣言されている方がグローバル変数で、関数の中で宣言されている方がローカル変数となります。グローバル変数のスコープはscript内全体となり、ローカル変数のスコープは関数内のみとなります。

 

よって、10行目のgetNameで表示される結果は、6行目のローカル変数の値である「三四郎」となります。11行目の結果は、script内全体で呼び出すことのできるグローバル変数の値「こころ」となります。

 

グローバル変数の値はページが再度読み込まれるまで保持され、ローカル変数の値は関数が呼び出されるたびに初期化されます。

 

また、ES2015(ES6)環境以前のJavaScriptにおいては、CやJavaにあるような { } で囲まれた範囲によるブロックスコープは存在しませんのでご注意を。

 

関連ページ

変数および定数の宣言(let/const)[ES2015(ES6)]

 

 

次に、上記のコードの6行目において、varを省略してみます。

 

 

すると、今度は11行目の結果も三四郎に変わります。

 

これは、変数の宣言においてvarを利用しない変数のスコープは、関数内で宣言されたとしても、常にグローバル変数となることから生じます。

 

よって、3行目で宣言したtitle変数の値は、10行目のgetTitle関数の実行において、こころから三四郎に置き換わってしまいます。

 

基本的に、変数の衝突を防ぐためにも、またより分かりやすいコードを記述するためにも、グローバル変数の多様は避け、変数の宣言時には常にvarを付けたほうが良いでしょう。

 

 

 

 

LINEで送る
Pocket

Copyright © 2019 思考の葉 All Rights Reserved.  プライバシーポリシー