function命令 登録、評価のタイミング

「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.

 

TagTimes

Simple time tracking tool
Developed by Namu Works