预编译执行顺序

 
        function preCompile(a,c){
            console.log(a);      
            function a(){
                alert(1);
            }
            console.log(a);
            var a=1;
            console.log(a);
            console.log(b);
            function b(){

            }
            console.log(c);
        }
        var a=2;
        console.log("window1"+a);
        preCompile(3,4);
        console.log("window2"+a);
        function preCompile(a,c){
console.log(a); //   ƒ a(){
            //     alert(1);
            // }
            function a(){
                alert(1);
            }
            console.log(a);    
// ƒ a(){
//                 alert(1);
//             }
var a=1;
console.log(a);    //1
console.log(b);  
// ƒ b(){

//             }
function b(){

}
console.log(c);  //4
}
var a=2;
console.log("window1"+a); //window12
preCompile(3,4);
console.log("window2"+a);  //window22

预编译

1.创建一个对象

2.找形参和变量的声明,作为对象的属性,值是undefined

3.实参和形参相统一

4.找函数声明,会覆盖变量的声明

obj:{

a: undefined  3      function a (){  alert(1)}

c: undefined  4

b: undefined        f unction b (){}

}

预编译之后,js的解释执行,按顺序逐行执行

原文地址:https://www.cnblogs.com/sunmarvell/p/15363586.html