関数とは
一連の処理をまとめたものを「関数」と呼ぶ。関数は一連の処理をまとめて「関数名」として定義し、その関数名を呼び出すことで、処理する。
function 関数名( 引数, 引数, ・・・ ){
//複数の処理
return 戻り値;
}
無名関数(匿名関数)
JavaScriptでは関数自体もデータ型
である。下記のようにデータ型として関数を定義するのを無名関数(匿名関数)
と呼ぶ。
var 変数名= function( 引数 , 引数 , ... ) {
// 複数の文
return 戻り値;
}
引数
引数(Argument)
とは関数を呼び出す場合に渡してあげるデータ(変数)のこと
をいう。
引数は複数セットすることができ、引数の間にカンマを入れて定義する。
※引数の名前はわかりやすい名前にする。
関数のオーバーロード
Javaなどのデータ型が厳密に扱われる言語では、引数のデータ型や数が異なると同じ名前の関数でも別の関数として扱われるため、同じ名前で引数が異なる関数をいくつも定義できる。これをオーバーロード
と呼ぶ。
しかしJavaScriptでは、同じ名前の関数は引数のデータ型や数が異なっていても同じ関数として扱われ、関数の定義は後から定義した関数で上書きされてしまう。
//引数が1つのsample()を定義
function sample( arg ) {
return 1;
}
//引数が2つのsample()を定義
function sample( arg1 , arg2 ) {
return 2;
}
//引数を1つ指定してsample()を呼び出しても最後に定義した方が実行される
alert( sample(10) );
変数のスコープについて
変数を利用する場合、そのスコープ(Scope)を意識することは重要である。スコープとはその変数が利用できる範囲のことをいう。
グローバル変数とローカル変数
変数の種類 | 説明 |
---|---|
グローバル変数 | プログラム全体で利用する変数。関数の外で定義された変数。 |
ローカル変数 | 宣言した関数内でのみ利用可能な変数。関数内部で定義された変数。 |
var num = 1; // グローバル変数
function sample( ) {
var num = 0 // ローカル変数
return num;
}
window.alert(sample()); // 0
window.alert(num); //1
JavaScriptのスコープのルール
- ローカル変数は必ずvarで宣言→同名のグローバル変数がある場合はそちらを参照する
- ローカル変数は関数の先頭で宣言→ローカル変数は関数全体で有効なので宣言前に利用するとundefindになる。
即時関数
今までfunction
で定義した関数はその関数名を呼び出すことにより実行される。
即時関数は定義されるタイミングで実行する関数である。
(function hello(name){
console.log("hello " + name);
})("Tom");
※関数名も省略が可能。
即時関数を利用するメリット
- 即時関数は、現在のグローバル変数を汚染せずに新たなスコープを作成するための唯一の手段
- 再利用されない一連の処理を新たなスコープで包み、プログラムをスコープ上のサンドボックス内で実行すること