js预编译

预编译


1,检查所有语法错误,如果存在语法错误无法执行

2,预编译过程(变量提升,函数提升)

3,解释一行,执行一行

函数声明整体提升,所以函数可以先执行再定义

变量提升提升声明,不提升赋值,因此再赋值之前使用,值是undefined

暗示全局变量(未声明就赋值的变量):

        1,全局写不写var都是挂在window上面

        2,函数里面未声明的变量,在函数被执行时会被挂在windows(GO->global object)上面

function test(){
    var a = b = 1;//相当于var a; b = 1;a = b
    
}
test()
console.log(b)  //1

-----------------------------------------------

function test(a){
    console.log(a);
    var a = 1;
    console.log(a)
    function a(){};
    console.log(a)
}

test(2)   //function a(){} ,1,1  
函数内部变量提升优先级:变量声明->实参赋值->函数声明
------------------------------------------------

function test(){
    var a = b = 1;
    console.log(b)
}
过程  AO{
         a:undefined  --> GO{ b:1  }  -->AO{ a:1 }       
     }

------------------------------------------------
function test(){
    console.log(b)
    if(a){
        var b = 2
    }
}
test()    //undefined   因为变量、函数提升不看判断条件

----------------------------------------------------

function test(){
    return a;
    a = 1;
    function a(){};
    var a = 2;
}

console.log(test())   //function a(){}

----------------------------------------------------

function test(){
    a = 1;
    function a(){};
    var a = 2;
    return a;
}
console.log(test())    //2

-------------------------------------------------------

a = 1;
function test(e){
    function e(){};
    arguments[0] = 2;
    console.log(e);
    if(a){
      var  b = 3; 
    }
    var c;
    a = 4;
    var a;
    console.log(b)
    f = 5;
    console.log(c);
    console.log(a);
}
var a;
test(1);  //2.undefined,undefined,4


---------------------------------------------------------
typeof(a)&&(-true)+(+undefined)+''-->'undefined'&&(-1)+(NaN)+''-->'Nan'


















你可能感兴趣的:(js深度指南,javascript,前端,开发语言)