JS进阶之预解析

预解析

  1. var和function关键词会预先解析
  2. 提前赋值
  • var a = 10 提前解析为var a(此时a的值为undifined)
  • 函数,在正式运行代码前赋值为整个函数块
  1. 预解析结束后,在逐行解读代码
    console.log(a) 
    var a = 1;
    //解析过程
    var a;
    console.log(a) 
    a = 1;
    console.log(b);
    var b = 123;
    function b(){
        console.log(456)
    };
    
    解析过程
    var b;
    //函数,在正式运行代码前,赋值为整个函数块
    function b(){
        console.log(456)
    };
    console.log(b);
    b = 123;
    console.log(a) 
    var a=1;      
    function a(){console.log(2)}  
    console.log(a) 
    var a=3;       
    console.log(a) 
    function a(){console.log(4)} 
    console.log(a)
      //解析过程
      //预解析的过程
    var a;
    function a(){console.log(2)}
    function a(){console.log(4)} 
        //逐行解析
    console.log(a)    // function a(){console.log(4)} 
    a = 1;
      console.log(a)  // 1
    a = 3;
    console.log(a)   //3
    console.log(a)    //3

作用域

es5中只有全局作用域和局部作用域之分(函数内的为局部作用域)
函数内可以取全局作用域 全局不可以取局部作用域

    var a=1;  //全局作用域
    function fn1(){ 
        console.log(a)//拿得到a
    };
    fn1()

    function fn1(){
        var a=1;    //局部作用域
    };
    fn1();
    console.log(a);//拿不到a  

扩展

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

    //2)
    function f1(){
        var a = 1;
    };
    f1();
    console.log(a); //报错

    //3)
    var a = 1;
    function f1(){
        console.log(a);
        a = 2;
    };
    f1(); //1
    console.log(a); //2 

    //4)
//  全局变量和局部变量同名的坑
// (1)在全局变量和局部变量不同名时,其作用域是整个程序。详见(3)
// (2)在全局变量和局部变量同名时,全局变量的作用域不包含同名局部变量的作用域。详见(4)
    var a = 1;
    function f1(){
        console.log(a);   
        var a = 2;
         //解析过程
        // var a;
        // console.log(a) 
        // a = 2;
    };
    f1(); //undefined
    console.log(a);  //1

面试题

//面试题1
    var a = 10;    
    function f1(){    
        var b = 2 * a;   
        var a = 20; 
        var c = a+1;    
        console.log(b);     
        console.log(c);    
    }    
    f1();

    //f1()解析过程 
    var b;
    var a;
    var c;
    b = 2*a   //NAN
    a = 20;
    c = 21;
    console.log(b);   //NAN  
    console.log(c);    //21

//面试题2 
    var a=10;
    function test(){
        console.log(a);      
        a=100;       
        console.log(this.a);     
        var a;      
        console.log(a); 
    }
    test();
    //test()解析过程
    var a;
    console.log(a);   //undefined
    a = 100;
    console.log(this.a);    //this  === window    var a=10;
    console.log(a);      //100
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值