JavaScript権威ガイド4-JS解像器


次の二つのコードを考慮します.
scope = 'hello';    
function func(){
    console.log(scope);    //hello
}
func();
scope = 'hello';
function func(){
    console.log(scope);    //undefined
    var scope = 'world';
}
func();
JavaScriptの関数的役割は、関数内のすべての変数が関数内で常に授業中であることを意味します.興味深いことに、変数は宣言される前から使われています.JavaScriptのこの特性は、通常は声明の前倒しと呼ばれています.JavaScript関数で宣言されているすべての変数は、関数の上部に前倒しされています.上記の2番目のコードと同じです.
scope = 'hello';
function func(){
    var scope;
    debug(scope);
    scope = 'world';
}
func();
同様に、関数の事前解析もあります.次の例があります.
function a(){}    
console.log(a);    //function a(){}
同時に、関数の事前解析は表式で消去できます.
var a = 1;
function a(){}
console.log(a);//1
要約:JS解析器の実行手順:
    1.事前解析
        1)変数宣言
        2)関数宣言
    2.コードを逐行解読する
        1).表現
        2)関数呼び出し