JavaScriptの関数宣言


JavaScriptの変数はコードのトップステートメントで提案されています.変数宣言の作用領域の問題をテストしたいですが、ついでに関数宣言の違いを影響させたくないです.上のコード:
 
...{

f();

function f(){
    alert('f');
}

}
 
ここの運行結果はundefinedなどを出すべきだと思いましたが、意外に'f'が出てきました.f関数を宣言するように変更しました.
 
...

var f = function(){
    alert('f');
}

...
 
想像の効果を達成しました.undefined.
 
頭の中の変数を宣言する理論は間違っていません.関数宣言方式の異なる知識の穴をあけました.よくある種の面接問題が答えを呼んでいます.
 
var f = function (){
    alert(1);
};

function f(){
    alert(2);
}

f();

//        ?
 
これらの問題の答えは、2つのステートメント関数の方法でロードされる時間帯が異なり、前者(var)は実行時にロードされますが、後者は「解釈期間」でロードされます.ここは思い切って美を略奪しないで、ここですから見たのです.XD
 
「説明期間」と「実行期間」の詳細については分かりませんが、エンジンについてはjs解釈の細部過程についてはもっと深く研究する必要があります.