宣言した変数はどこからでも参照できるわけではありません。
変数には参照できる範囲が定められており、その範囲をスコープといいます。
早速ですが、下記のサンプルを実行してみましょう。
実行する関数内にはステートメントは1行もありませんが、実行するとどうなるでしょうか?
var msgHello = 'Hello!'
console.log(msgHello);
function outputScope_1() {
}
Hello!
関数を実行すると、ログに「Hello!」と表示されたと思います。
関数の外に記述した2つのステートメント、msg変数の初期化とログ出力が実行されました。
GASにはどの関数に属さない領域にステートメントを記述することができ、この領域を グローバル領域 といいます。
プロジェクトに含まれるいずれかの関数が呼び出されると、呼び出された関数よりも先に、グローバル領域に記述されたステートメントが実行されます。
次のサンプルを実行すると、まずグローバル領域に記述されたステートメントが上から順番に実行されていきます。
その後、呼び出された関数内のステートメントが実行されることが確認できるでしょう。
console.log('Good Morning!');
function outputScope_2() {
console.log('Hello!');
}
console.log('Good Night!');
Good Morning!
Good Night!
Hello!
異なるgsファイルに記述されていたとしても、プロジェクト内の任意の関数の呼び出しにより、グローバル領域に記述される全てのステートメントが実行されます。
複数のgsファイルのグルーバル領域にステートメントを点在させることは、わかりやすさの観点からおすすめできません。
変数にはその変数を参照することができる範囲が定められています。
これを スコープ といいます。スコープには次の2種類があります。
関数の中で宣言された変数のスコープは ローカルスコープ といい、その関数の中でのみ参照することができます。
このような変数を ローカル変数 といいます。
一方、グローバル領域で宣言された変数はプロジェクトのどこからでも参照することができ、
そのスコープは グローバルスコープ、またその変数を グローバル変数 といいます。
それでは、それぞれのスコープについてサンプルで確認していきましょう。
次のサンプルはローカル変数のスコープを確認するサンプルです。
localFunction_2
関数を実行すると「localFunction_2が定義されていません」というエラーが発生します。
このようにローカル変数は外からはアクセスすることができないのです。
function localFunction_1() {
var localMsg = 'ローカル';
}
function localFunction_2() {
console.log(localMsg);
}
var globalMsg = 'グローバル';
function globalFunction_1() {
console.log(globalMsg);
}
グローバル
このようにグローバル変数は全ての関数からアクセスすることができます。
それでは、次のサンプルの場合はどうなるでしょうか?
msg変数がグローバル領域でも、関数の中でも宣言されています。
このような場合にglobalFunction_2
を実行するとローカル変数のmsgが表示されます。
var msg = 'グローバル';
function globalFunction_2() {
var msg = 'ローカル';
console.log(msg);
}
ローカル