首页 > Web开发 > 详细

Js中的提升

时间:2017-01-25 17:38:42      阅读:104      评论:0      收藏:0      [点我收藏+]

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特别的机制,书写过程中应该尽量避免重复声明。

  

Js中的提升

原文:http://www.cnblogs.com/Darlietoothpaste/p/6349714.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!