ユーザ定義関数の関数リテラル(無名関数・匿名関数)/ Functionコンストラクタを説明します。
関数リテラル(無名関数・匿名関数)
関数は変数に代入することが可能です。
1 |
変数 = 関数名; |
変数への代入と、関数の定義を同時に行うことも可能で、下記のように関数の定義を値として記述する方法を「関数式」と呼びます。最後の } の終わりに、セミコロン(;)を忘れないようにして下さい。
関数式
1 2 3 |
変数 = function 関数名(){ 処理; }; |
例
1 2 3 4 5 |
var square = function getSquare(height, width){ return height*width; }; document.write(square(2,3)); //結果:6 |
関数名を省略することも可能で、この場合「関数リテラル(無名関数/匿名関数)」と呼ばれます。
関数リテラルの構文。無名関数を変数に代入しています。
1 2 3 4 5 |
var square = function(height, width){ return height*width; }; document.write(square(2,3)); //結果:6 |
function命令(関数宣言)と違い、関数リテラルの場合は必ず関数の定義の後に呼び出しを行います。下記のように定義の前に関数を呼び出すとエラーとなります。
1 2 3 4 5 |
document.write(square(2,3)); //エラー var square = function(height, width){ return height*width; }; |
スポンサーリンク
Functionコンストラクタ
JavaScriptの組み込みオブジェクトであるFunctionオブジェクトを利用して、下記のように関数を定義することもできます。
1 2 3 |
var square = new Function('height', 'width', 'return height*width'); document.write(square(2,3)); //結果:6 |
Functionコンストラクタには、引数(仮引数)を指定し、最後に関数を記述します。
square関数はFunctionオブジェクトのインスタンスであり、JavaScriptでは関数自体もオブジェクトであり、変数に代入できることが明確に認識できます。
1 2 3 4 5 |
var square = new Function('height', 'width', 'return height*width'); var square2 = square; //別の変数に代入 document.write(square2(4,5)); //結果:20 |
基本的に関数の定義は、セキュリティ/パフォーマンスの関係からFunctionコンストラクタは利用せずに、function命令及び関数式を利用することが推奨されています。
関連ページ