zoukankan      html  css  js  c++  java
  • Js中的提升

    Js的执行并不是由上向下一行一行顺序下来的,一个例子如下:

       

    a = 2;
    
          var a ;
    
          console.log(a)   //2

    输出的是2,这区别于别的语言。 

    再一个例子:

         

    console.log(a);  //undefined
    
         var a = 2;

    输出的是undefined

         

         由var a  = 2;

         Js的引擎机制是先编译,再执 ,先从编译器说起,编译过程中,我们知道编译会先根据声明为其确定作用域。上面的例子中实际上编译器会将其看成两个声明,分别为var a;a =2。因为事先需要确定作用域,所以var a;在编译过程中就已经执行,而赋值操作a =2;就会留在原地等待正常顺序的执行。所以上面的两个例子可以看成如下:

         

    第一个:
    
         var a;
    
         a = 2;
    
         console.log(a);
    
         第二个:
    
         var a;
    
         console.log(a);
    
         a  = 2;

    上面的这种提前声明则被称作为提升。提升在每个作用域中都存在,如下:

        

     var a;
    
         function foo(){
    
            b = 2;
    
            console.log(b);   //2
    
            var b;
    
    }

    可以理解为如下:   

    var a;
    
         function foo(){
    
            var b;
    
            b = 2;
    
            console.log(b);   //2
    
    }
    
     

         另外假如重复声明的话,后面的声明会覆盖前面的声明,函数声明会覆盖变量声明。如下:

        foo(); //3
    
         function foo(){
    
             console.log(2)
    
    };
    
         function foo(){
    
            console.log(3)
    
    };

    后面的声明覆盖了前面。

        

     foo();  // 2
    
         function foo(){
    
           console.log(2);
    
    };
    
        var foo;

    函数声明覆盖了变量声明。

        

       

           由于Js特别的机制,书写过程中应该尽量避免重复声明。

      

  • 相关阅读:
    软件的结构
    SpringMVC返回值类型及响应数据类型
    mybatis学习日记3
    面试八
    面试七
    微信小程序实例源码大全下载
    dot.js模板引擎,避免大量拼接字符串
    前端重构方案了解一下
    微信小程序开发基础教程
    如何让签到成为提升用户活跃度的利器
  • 原文地址:https://www.cnblogs.com/Darlietoothpaste/p/6349714.html
Copyright © 2011-2022 走看看