「function命令」と「関数リテラル」「Funcitonコンストラクター」では登録、評価のタイミングが異なる
「関数定義が変数定義である」と考えると下記参考例1は通常エラーとなるが、「function命令」ではコードを解析/コンパイルするタイミングで関数を登録するためエラーとはならない。
一方、「関数リテラル」「Funcitonコンストラクター」では、実行時(代入時)に評価されれるため参考例2のようにエラーとなってしまう。
//1.funciton命令 /* functon命令はコードを解析/コンパイルするタイミングで、関数を登録しているため実行時にはすでにコード内の構造の一部として、getTriangle関数をどこからでも呼び出すことができる。 */ var answer = '台形の面積 答え1: ' + (getTrapezoid1(3,2,4)); document.getElementById('hoge1').textContent=answer; function getTrapezoid1(upper, lower, height){ return (upper + lower)*height/2; } // 「台形の面積 答え1: 10」 //----------------------------------------------------------------- //2.関数リテラル /* 関数リテラルは実行時(代入時)に評価されるため下記書式ではエラーとなる。(Functionコンストラクターでも同様) */ var answer = '台形の面積 答え2: ' + (getTrapezoid2(3,2,4)); document.getElementById('hoge2').textContent=answer; var getTrapezoid2 = function(upper, lower, height) { return (upper + lower)*height/2; }; //error
See the Pen QpyoqJ by nwstcode (@nwst) on CodePen.