javascriptの2つの定義関数方式の違いと関数のプリコンパイル効果


javascriptで関数を定義する方法は以下の2つがあることを知っています.
function mm(){}
この形式は一つの関数を宣言するもので、varが一つの変数機構を宣言するのと同じで、シナリオは解釈実行前にプリコンパイル処理を行います.
 
var mm=function(){}
この形式は一つの変数に対して値を賦課し、プリコンパイルもしますが、ただ事前変数にメモリ空間を割り当てるだけで、初期化はしていません.
コード1:
 alert(a);//    a   
 alert(b);//undefined
 alert(c);//JS  :“c”    
 function a()
 {
 
 }
 
 var b = function(){};
 
コード2:
 func(); //2
 func = function() {alert(1);};
 func(); //1
 function func() {alert(2);};
 func(); //1
表示:
Javascriptは完全に順番に解釈して実行するのではなく、説明する前にJavascriptを一回「プリコンパイル」します.最初の方法で定義された関数は、javascriptが関数定義の前に使用することができます.第二の方式で定義された関数は、その値がundefinedであるため、事前に使用できない.