zoukankan      html  css  js  c++  java
  • 学习笔记=>《你不知道的JavaScript(上卷)》第四章:提升(变量提升,函数声明提升)

    4.1 编译器的视角看提升

    引擎会在解释JavaScript代码之前首先对齐进行编译,编译过程中的一部分工作就是找到所有的声明,并用合适的作用域将他们关联起来,这也正是词法作用域的核心内容。

      正确的思路是:包含变量和函数在内的所有声明都会在任何代码执行前首先被处理。

      

    var a = 6;
    
    //编译器会将var a = 6;看作两个声明
    
    var a;    //编译阶段进行的声明
    
    a = 6;    //赋值声明留在原地等待执行阶段

      这个过程就好像变量和函数声明从它们原来的位置(代码编写时的位置)移动到了最顶部,这个过程就叫做提升。

      另外,所有的作用域都会提升,无论是全局作用域或是任意函数作用域。

    //函数声明表达式中声明会提前,同普通变量提升一致
    var fun = function(){
          console.log('this a function');
    }
    
    //----->
    
    var fun;
    
    fun = function(){
          console.log('this a function');
    }

    4.2 函数优先

    函数声明与变量声明都会提升,但是要注意,是函数首先被提升,然后是变量的提升。

    总结:在任意作用域中(全局作用域或函数作用域),变量和函数的声明都会被提升到作用域

       顶部(函数声明优先)。编译器会将声明与赋值看作两个步骤,先声明将声明提升到

       作用域顶部(发生在编译阶段),然后赋值声明在原处等待执行阶段(执行阶段)

  • 相关阅读:
    计算器程序
    输入三个整数,输出最大数和最小数
    输入三个数a,b,c,要示按由小到大的顺序输出
    最短路
    luogu P3953 逛公园
    二分图匹配
    luogu P3231 消毒
    [bzoj2120] [洛谷P1903] 数颜色
    [bzoj2038] [洛谷P1494] [2009国家集训队] 小Z的袜子(hose)
    [洛谷P4012] [网络流24题] 深海机器人问题
  • 原文地址:https://www.cnblogs.com/huangzhenghaoBKY/p/9799123.html
Copyright © 2011-2022 走看看