js中if判断在预编译环节是怎么编译的。

如果用预编译来推的话。if判断里面的可以正确的推出来,但是外面这个打印出来的是1,又和预编译的不符合,这个时怎么编译的

                var a = 0
        if(true) {      
            a = 1;
            function a() {};
            a = 21;
            console.log(a);    //21
        }
        console.log(a);    //1

js 是解释型语言的吧,没有所谓的编译这个流程的吧。