前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Js中的提升

Js中的提升

作者头像
菜的黑人牙膏
发布2019-01-21 15:56:26
4.2K0
发布2019-01-21 15:56:26
举报
文章被收录于专栏:前端学习归纳总结

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

代码语言:javascript
复制
a = 2;

      var a ;

      console.log(a)   //2

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

再一个例子:

代码语言:javascript
复制
console.log(a);  //undefined

     var a = 2;

输出的是undefined

     由var a  = 2;

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

代码语言:javascript
复制
第一个:

     var a;

     a = 2;

     console.log(a);

     第二个:

     var a;

     console.log(a);

     a  = 2;

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

代码语言:javascript
复制
 var a;

     function foo(){

        b = 2;

        console.log(b);   //2

        var b;

}

可以理解为如下:   

代码语言:javascript
复制
var a;

     function foo(){

        var b;

        b = 2;

        console.log(b);   //2

}

 

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

代码语言:javascript
复制
    foo(); //3

     function foo(){

         console.log(2)

};

     function foo(){

        console.log(3)

};

后面的声明覆盖了前面。

代码语言:javascript
复制
 foo();  // 2

     function foo(){

       console.log(2);

};

    var foo;

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

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017-01-25 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档