自分のアウトプット用に書いているこのブログですが、今回のテーマは、、
●functionで定義した関数"test"と、無名関数を変数"test"に格納した時のスコープについてです。
どちらも実行する時は、test(引数1, 引数2...)という風に記述するので、違いがよく分かりませんが、この2通りの定義は「スコープ」の違いがあるのです。
●スコープとは
スコープとは「変数や関数を利用できる範囲(有効範囲)」のことです。変数や関数を定義したらプログラムのどこでも使えるという訳ではなく、使える範囲が決まっています。
(すご〜〜〜〜く極端な話、自作したアプリ内で定義した変数が違うアプリ内で読み込まれたら大変ですよねww)
では先ず、それぞれの定義の仕方から見ていきます。
●関数の定義(今回は便宜上、”通常の関数”と呼びます)
function test ( 引数1, 引数2....) {
//実行する処理
return 値; //何も値を返さない場合は省略出来ます
}
●無名関数を変数に代入する(今回は便宜上、”名前付き無名関数”と呼びます)
var test = function( 引数1, 引数2....) {
//実行する処理
return 値; //何も値を返さない場合は省略出来ます
}
どちらも実行する時は、
test( 引数1, 引数2....);
この2つの大きな違いは「関数を呼び出せるタイミング」が違います。
●通常の関数
test( 引数1, 引数2...) //実行できる
function test ( 引数1, 引数2...){
//実行する処理
}
test( 引数1, 引数2...) //実行できる
●名前付き無名関数
test( 引数1, 引数2...) //実行できない
var test = function ( 引数1, 引数2...){
//実行する処理
}
test( 引数1, 引数2...) //実行できる
このように、関数を実行できるタイミングが異なります。
通常の関数は、関数の作成箇所に関わらず、そのスコープ内であれば、どこからでの呼び出すことが出来ます。
一方、名前付き無名関数は、上記のように関数の作成箇所よりも下部でないと呼び出すことが出来ません。
●まとめ
スコープについては詳しくは説明しませんが、"function test"で定義した関数と、無名関数を"var test"で変数に代入した場合とでの「関数を実行できるタイミングの違い」の説明は以上になります。
無名関数は、処理を複数の場所で使い回すのでなく、引数として一連の処理を直接渡す際に用いるので無理やりな解説になりましたが、違いが分かって頂ければ嬉しいです。
0 件のコメント:
コメントを投稿