JavaScript: 関数を定義する方法2つ
JavaScriptで関数を定義する方法は3つあります。
- function文
- 無名関数(関数リテラル)
- Functionコンストラクタ(非推奨)
但し、最後のFunctionコンストラクタはセキュリティ的なリスクがあるので非推奨とされています。
ですから、ここでは上2つのfunction文と無名関数(関数リテラル)を使った関数定義方法を紹介します。
定義方法
2つの引数を受け取り、掛け算した値を返す関数を作成します。
// function文
function funcName(x, y){
return x * y;
}
// 無名関数(関数リテラル)
var funcName = function(x, y){
return x * y;
}
定義する場所に注意
「function文で定義した関数」と、「無名関数(関数リテラル)で定義した関数」は、認識されるタイミングが異なります。
次のコードではfuncAは正常に認識されていて、funcBは実行時エラーになることに注目してください。
console.log(funcA(3,2)); // 6
console.log(funcB(3,2)); // 実行時エラー
function funcA(x, y){
return x * y;
}
var funcB = function(x, y){
return x * y;
}
「function文で定義した関数」は、実行前のコードを解析したタイミングで関数が認識されます。
一方、「無名関数(関数リテラル)で定義した関数」は、 実行前のコードを解析したタイミングでは認識されていません。 実行時に初めて評価(代入)されます。
言い換えると、「function文で定義した関数」はどこで定義しても認識されています。 「無名関数(関数リテラル)で定義した関数」は実行前に定義する必要があります。
ですから次のように、実行される前に記述すると、エラーが出ずに正常に実行されます。
var funcB = function(x, y){
return x * y;
}
console.log(funcA(3,2)); // 6
console.log(funcB(3,2)); // 6 正常に実行された
function funcA(x, y){
return x * y;
}